kylin 910B 训练模型踩坑笔记

前言

我在做模型docker镜像,使用kylin 910B 显卡训练模型,pytorch框架,发现不能使用 GPU,应该使用 NPU。

需要提前安装 CANN,torch,torch_npu。

GPU: Graphics Processing Unit 图形处理单元
NPU: Neural network Processing Unit 神经网络处理单元
CANN: Compute Architecture for Neural Networks 异构计算架构


以下shell输出信息证明,没有 nvidia GPU信息,但可以查到有8张 NPU 芯片

bash 复制代码
[root@localhost]# nvidia-smi
-bash: nvidia-smi:未找到命令
[root@localhost]# uname -a
Linux localhost.localdomain 4.19.90-24.4.v2101.ky10.aarch64 #1 SMP Mon May 24 14:45:37 CST 2021 aarch64 aarch64 aarch64 GNU/Linux
[root@localhost]# cat /etc/kylin-release
Kylin Linux Advanced Server release V10 (Sword)

bash 复制代码
[root@localhost]# npu-smi info
+------------------------------------------------------------------------------------------------+
| npu-smi 24.1.0                   Version: 24.1.0                                               |
+---------------------------+---------------+----------------------------------------------------+
| NPU   Name                | Health        | Power(W)    Temp(C)           Hugepages-Usage(page)|
| Chip                      | Bus-Id        | AICore(%)   Memory-Usage(MB)  HBM-Usage(MB)        |
+===========================+===============+====================================================+
| 0     910B4-1             | OK            | 92.6        35                0    / 0             |
| 0                         | 0000:C1:00.0  | 0           0    / 0          3383 / 65536         |
+===========================+===============+====================================================+
| 1     910B4-1             | OK            | 90.2        33                0    / 0             |
| 0                         | 0000:C2:00.0  | 0           0    / 0          4610 / 65536         |
+===========================+===============+====================================================+
| 2     910B4-1             | OK            | 84.7        34                0    / 0             |
| 0                         | 0000:81:00.0  | 0           0    / 0          55408/ 65536         |
+===========================+===============+====================================================+
| 3     910B4-1             | OK            | 90.7        35                0    / 0             |
| 0                         | 0000:82:00.0  | 0           0    / 0          54146/ 65536         |
+===========================+===============+====================================================+
| 4     910B4-1             | OK            | 93.3        39                0    / 0             |
| 0                         | 0000:01:00.0  | 0           0    / 0          56266/ 65536         |
+===========================+===============+====================================================+
| 5     910B4-1             | OK            | 91.3        39                0    / 0             |
| 0                         | 0000:02:00.0  | 0           0    / 0          56266/ 65536         |
+===========================+===============+====================================================+
| 6     910B4-1             | OK            | 92.3        36                0    / 0             |
| 0                         | 0000:41:00.0  | 0           0    / 0          56266/ 65536         |
+===========================+===============+====================================================+
| 7     910B4-1             | OK            | 93.0        40                0    / 0             |
| 0                         | 0000:42:00.0  | 0           0    / 0          56267/ 65536         |
+===========================+===============+====================================================+
+---------------------------+---------------+----------------------------------------------------+
| NPU     Chip              | Process id    | Process name             | Process memory(MB)      |
+===========================+===============+====================================================+
| No running processes found in NPU 0                                                            |
+===========================+===============+====================================================+
| 1       0                 | 4175683       | python-text-emb          | 1280                    |
+===========================+===============+====================================================+
| 2       0                 | 2821156       | mindie_llm_back          | 50826                   |
| 2       0                 | 1241147       | python-text-emb          | 1310                    |
+===========================+===============+====================================================+
| 3       0                 | 2821158       | mindie_llm_back          | 50826                   |
+===========================+===============+====================================================+
| 4       0                 | 992192        | mindie_llm_back          | 52946                   |
+===========================+===============+====================================================+
| 5       0                 | 992194        | mindie_llm_back          | 52946                   |
+===========================+===============+====================================================+
| 6       0                 | 2746139       | mindie_llm_back          | 52946                   |
+===========================+===============+====================================================+
| 7       0                 | 2746141       | mindie_llm_back          | 52946                   |
+===========================+===============+====================================================+

调整模型训练

按步骤调整:

  • 1 修改模型训练代码
  • 2 选择 python 版本,建立 python 虚拟环境
  • 3 修改 r e q u i r e m e n t s . t x t requirements.txt requirements.txt,调整 D o c k e r f i l e Dockerfile Dockerfile
  • 4 在虚拟环境安装 CANN,torch,torch_npu,注意安装顺序

修改模型代码:

原来代码:
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

改为使用 NPU

device = torch.device('npu' if torch_npu.npu.is_available() else 'cpu')

选择 python 3.11.0版本,创建虚拟环境

kylin 物理机上的python 版本是 2.7.18。现在我需要不影响默认版本的情况下 创建 python 虚拟环境并且 配置 python 3.11版本

在物理机上安装了python 3.11.0版本,指定到非系统路径。 我原来装的是3.11.5版本,结果到安装 CANN 时,发现当前CANN支持Python3.7.x至3.11.4版本。


1. 安装依赖包

首先安装编译 Python 3.11 所需的依赖库:

bash 复制代码
sudo yum update -y
sudo yum install -y gcc openssl-devel bzip2-devel libffi-devel zlib-devel wget

2. 下载并编译 Python 3.11

从源码编译安装 Python 3.11,将其安装到自定义目录(如/opt/python3.11):

bash 复制代码
# 下载Python 3.11源码 
wget https://www.python.org/ftp/python/3.11.0/Python-3.11.0.tgz
tar -xzf Python-3.11.0.tgz 
cd Python-3.11.0 

# 配置并编译(指定安装目录)
./configure --prefix=/opt/python3.11 --enable-optimizations
make -j$(nproc) 
sudo make install

物理机上无法连外网下载,我从其他电脑下载好压缩包再上传到物理机

3. 创建虚拟环境

使用新安装的 Python 3.11 创建虚拟环境:

bash 复制代码
# 创建虚拟环境目录
mkdir ~/my_python311_env
cd ~/my_python311_env

# 使用Python 3.11的venv模块创建虚拟环境
/opt/python3.11/bin/python3 -m venv myenv

# 激活虚拟环境
source myenv/bin/activate

4. 验证环境

激活虚拟环境后,检查 Python 版本:

bash 复制代码
python --version  # 输出 Python 3.11.0
which python      # 输出 ~/my_python311_env/myenv/bin/python

5. 使用虚拟环境

每次需要使用 Python 3.11 时,只需激活虚拟环境:

bash 复制代码
source ~/my_python311_env/myenv/bin/activate

若要退出虚拟环境,执行:

bash 复制代码
deactivate

修改 r e q u i r e m e n t s . t x t requirements.txt requirements.txt、 D o c k e r f i l e Dockerfile Dockerfile

requirements.txt:

json 复制代码
numpy==1.26.4
pandas==2.1.4
scikit_learn==1.3.2
tqdm==4.66.1
transformers==4.35.2
openpyxl==3.1.2

filelock
typing-extensions
sympy
networkx
jinja2

Dockerfile:

bash 复制代码
# 使用完整Python 3.11基础镜像
FROM python:3.11

# 设置工作目录
WORKDIR /app

# 安装系统依赖(包括昇腾NPU所需的glibc兼容库)
RUN apt-get update && apt-get install -y --no-install-recommends \
    libgomp1 \
    libc6-dev \
    libsqlite3-0 \
    && rm -rf /var/lib/apt/lists/*

COPY requirements.txt .

# 安装项目依赖
RUN pip install -r requirements.txt

# 复制剩余项目文件
COPY . .

# 初始化环境变量(防止未定义警告)
ENV LD_LIBRARY_PATH=""

# 设置昇腾NPU所需路径
ENV LD_LIBRARY_PATH=/usr/local/lib/python3.11/site-packages/torch_npu/lib:$LD_LIBRARY_PATH

# 验证命令(构建后可选运行)
CMD ["python", "-c", "import torch; import torch_npu; print(f'PyTorch version: {torch.__version__}'); print(f'torch_npu available: {torch_npu.npu.is_available()}')"]

安装 CANN、torch、torch_npu

参考文档1 这篇是git工程中的README,我是从这篇文章开始学习的,参考文章2、3都是从这篇找到的。

参考文章2:安装 CANN

参考文档3:安装 pytorch

参考文档4:pytorch 和 torch_npu 的安装步骤 包含安装包,和参考文档3类似,看一个就可以了。

综上参考文章,实现步骤如下:

安装 CANN

异构计算架构CANN(Compute Architecture for Neural Networks)是昇腾针对AI场景推出的异构计算架构,向上支持多种AI框架,包括MindSpore、PyTorch、TensorFlow等,向下服务AI处理器与编程,发挥承上启下的关键作用,是提升昇腾AI处理器计算效率的关键平台。同时针对多样化应用场景,提供多层次编程接口,支持用户快速构建基于昇腾平台的AI应用和业务。

CANN 安装包下载

如果 下载的 toolkit 安装包,那么按照下面方式 快速安装

增加对软件包的可执行权限。

bash 复制代码
chmod +x Ascend-cann-toolkit_8.2.RC1_linux-$(arch).run

安装软件包(安装命令支持--install-path= 等参数,具体使用方式请参见参数说明)。

bash 复制代码
./Ascend-cann-toolkit_8.2.RC1_linux-$(arch).run --install

如果用户未指定安装路径,则软件会安装到默认路径下,默认安装路径如下。

root用户:"/usr/local/Ascend",

非root用户:" *\${HOME}* /Ascend", *${HOME}* 为当前用户目录。

= 摘要 =

驱动程序:已安装在 /usr/local/Ascend/driver 目录下。

Toolkit:Ascend-cann-toolkit_8.2.RC1_linux-aarch64 安装成功,已安装在 /usr/local/Ascend 目录下。

请确保环境变量已配置好。

  • 要对所有用户生效,您可以将"source /usr/local/Ascend/ascend-toolkit/set_env.sh"添加到/etc/profile中。
  • 要使当前用户生效,您可以执行以下命令:
    source /usr/local/Ascend/ascend-toolkit/set_env.sh,
    或者将"source /usr/local/Ascend/ascend-toolkit/set_env.sh"添加到 ~/.bashrc 文件中。

配置环境变量,当前以非root用户安装后的默认路径为例,请用户根据set_env.sh的实际路径执行如下命令。

bash 复制代码
source ${HOME}/Ascend/ascend-toolkit/set_env.sh

上述环境变量配置只在当前窗口生效,用户可以按需将以上命令写入环境变量配置文件(如.bashrc文件)。


如果安装其他场景的安装包,可参考 安装CANN

安装 torch 安装 torch_npu

安装步骤

或者从这里下载:

torch torch_npu

相关推荐
Είναι η κοπέλα16 小时前
显存计算与模型选择:你的显卡能跑多大的模型
人工智能·pytorch·python·开源·conda
海天一色y2 天前
模型部署的「通用语」:ONNX 转换
pytorch·onnx
Thomas.Sir2 天前
第26课:工业零部件外观缺陷检测系统:从学术Demo到产线工程的重构实战
pytorch·ai
Zguigo3 天前
【CUDA6】CUDA Stream 是什么,为什么 CUDA 是异步执行,如何正确测量 GPU 时间以及多个任务如何重叠执行
人工智能·pytorch·深度学习
论文复现现场3 天前
RTX 3090 24GB 适合科研吗?单卡论文复现、PyTorch 显存检查与 OOM 排错
人工智能·pytorch·python·深度学习·cuda·rtx3090
论文复现现场3 天前
AutoDL、算家云与公有云 GPU 怎么选?环境复现、计费与断点恢复对比
pytorch·深度学习·云计算·gpu
盘古开天16664 天前
PPO算法代码实战(三):PyTorch从零实现PPO求解CartPole
人工智能·pytorch·算法
Είναι η κοπέλα4 天前
PyTorch 安装与验证
人工智能·pytorch·python
盼小辉丶5 天前
PyTorch强化学习实战(27)——进化策略在强化学习中的应用
人工智能·pytorch·深度学习·强化学习
weixin_447195295 天前
【无标题】
pytorch·python