前言
我在做模型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 修改 <math xmlns="http://www.w3.org/1998/Math/MathML"> r e q u i r e m e n t s . t x t requirements.txt </math>requirements.txt,调整 <math xmlns="http://www.w3.org/1998/Math/MathML"> D o c k e r f i l e Dockerfile </math>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
修改 <math xmlns="http://www.w3.org/1998/Math/MathML"> r e q u i r e m e n t s . t x t requirements.txt </math>requirements.txt、 <math xmlns="http://www.w3.org/1998/Math/MathML"> D o c k e r f i l e Dockerfile </math>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都是从这篇找到的。
参考文档4:pytorch 和 torch_npu 的安装步骤 包含安装包,和参考文档3类似,看一个就可以了。
综上参考文章,实现步骤如下:
安装 CANN
异构计算架构CANN(Compute Architecture for Neural Networks)是昇腾针对AI场景推出的异构计算架构,向上支持多种AI框架,包括MindSpore、PyTorch、TensorFlow等,向下服务AI处理器与编程,发挥承上启下的关键作用,是提升昇腾AI处理器计算效率的关键平台。同时针对多样化应用场景,提供多层次编程接口,支持用户快速构建基于昇腾平台的AI应用和业务。

如果 下载的 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
或者从这里下载: