前言
我在做模型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 芯片
[root@localhost]# nvidia-smi-bash: nvidia-smi:未找到命令[root@localhost]# uname -aLinux 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-releaseKylin Linux Advanced Server release V10 (Sword)
[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 修改 ,调整 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 所需的依赖库:
sudo yum update -ysudo yum install -y gcc openssl-devel bzip2-devel libffi-devel zlib-devel wget
2. 下载并编译 Python 3.11
从源码编译安装 Python 3.11,将其安装到自定义目录(如/opt/python3.11
):
# 下载Python 3.11源码 wget https://www.python.org/ftp/python/3.11.0/Python-3.11.0.tgztar -xzf Python-3.11.0.tgz cd Python-3.11.0 # 配置并编译(指定安装目录)./configure --prefix=/opt/python3.11 --enable-optimizationsmake -j$(nproc) sudo make install
物理机上无法连外网下载,我从其他电脑下载好压缩包再上传到物理机
3. 创建虚拟环境
使用新安装的 Python 3.11 创建虚拟环境:
# 创建虚拟环境目录mkdir ~/my_python311_envcd ~/my_python311_env# 使用Python 3.11的venv模块创建虚拟环境/opt/python3.11/bin/python3 -m venv myenv# 激活虚拟环境source myenv/bin/activate
4. 验证环境
激活虚拟环境后,检查 Python 版本:
python --version # 输出 Python 3.11.0which python # 输出 ~/my_python311_env/myenv/bin/python
5. 使用虚拟环境
每次需要使用 Python 3.11 时,只需激活虚拟环境:
source ~/my_python311_env/myenv/bin/activate
若要退出虚拟环境,执行:
deactivate
修改 、
requirements.txt:
numpy==1.26.4pandas==2.1.4scikit_learn==1.3.2tqdm==4.66.1transformers==4.35.2openpyxl==3.1.2filelocktyping-extensionssympynetworkxjinja2
Dockerfile:
# 使用完整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应用和业务。
CANN 安装包下载
如果 下载的 toolkit 安装包,那么按照下面方式快速安装
增加对软件包的可执行权限。
chmod +x Ascend-cann-toolkit_8.2.RC1_linux-$(arch).run
安装软件包(安装命令支持--install-path= 等参数,具体使用方式请参见参数说明)。
./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的实际路径执行如下命令。
source ${HOME}/Ascend/ascend-toolkit/set_env.sh
上述环境变量配置只在当前窗口生效,用户可以按需将以上命令写入环境变量配置文件(如.bashrc文件)。
如果安装其他场景的安装包,可参考 安装CANN
安装 torch 安装 torch_npu
或者从这里下载: