掘金 人工智能 6小时前
kylin 910B 训练模型踩坑笔记
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文详细介绍了在Kylin 910B显卡服务器上配置PyTorch以使用昇腾NPU进行模型训练的完整流程。文章首先阐述了GPU与NPU的区别,并通过`nvidia-smi`和`npu-smi`命令的输出,证明了服务器配备的是NPU而非GPU。接着,指导用户如何修改模型代码以适配NPU,并重点讲解了如何在不影响系统默认Python版本的情况下,创建和管理Python 3.11虚拟环境,包括依赖库的安装和编译。此外,文章还提供了更新`requirements.txt`和`Dockerfile`的建议,以支持NPU环境。最后,详细说明了CANN(Compute Architecture for Neural Networks)的安装步骤、环境变量配置方法,以及PyTorch和`torch_npu`的安装,确保用户能够顺利搭建昇腾NPU的开发和训练环境。

💡 **硬件识别与环境准备**:文章明确指出Kylin 910B服务器使用的是昇腾NPU而非NVIDIA GPU,并通过`npu-smi`命令展示了NPU的状态和使用情况。为确保模型训练能在NPU上进行,需要安装CANN、PyTorch和`torch_npu`。

🐍 **Python虚拟环境配置**:为了解决系统自带Python版本与CANN兼容性问题,文章详细指导了如何在物理机上安装特定版本的Python(3.11.0),并利用`venv`模块创建独立的虚拟环境。这包括安装编译Python所需的依赖、下载源码、编译安装、创建虚拟环境、激活与退出虚拟环境等关键步骤,确保了开发环境的隔离性和兼容性。

📦 **项目依赖与Dockerfile优化**:文章提供了更新`requirements.txt`文件的建议,列出了模型训练所需的核心Python库,如NumPy、Pandas、Scikit-learn、Transformers等。同时,给出了一个优化的`Dockerfile`示例,该文件基于Python 3.11镜像,安装了必要的系统依赖,并正确配置了`LD_LIBRARY_PATH`环境变量,以指向`torch_npu`的库文件,确保容器内环境的正确性。

🚀 **CANN及PyTorch安装与配置**:文章详细阐述了CANN的安装过程,包括下载安装包、赋予执行权限、执行安装命令,以及如何配置环境变量(`source /usr/local/Ascend/ascend-toolkit/set_env.sh`)。并说明了如何下载和安装PyTorch以及`torch_npu`,强调了安装顺序的重要性,为后续的模型训练奠定了基础。

⚙️ **模型代码适配NPU**:为使现有模型代码能够利用NPU进行计算,文章指导将原始代码中检测GPU的逻辑(`torch.device('cuda' if torch.cuda.is_available() else 'cpu')`)修改为检测NPU(`torch.device('npu' if torch_npu.npu.is_available() else 'cpu')`),这是实现模型在昇腾硬件上运行的关键一步。

前言

我在做模型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                   |+===========================+===============+====================================================+

调整模型训练

按步骤调整:


修改模型代码:

原来代码:
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.txtrequirements.txtDockerfileDockerfile

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都是从这篇找到的。

参考文章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 安装包,那么按照下面方式快速安装

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

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 目录下。

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


配置环境变量,当前以非root用户安装后的默认路径为例,请用户根据set_env.sh的实际路径执行如下命令。
source ${HOME}/Ascend/ascend-toolkit/set_env.sh

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



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


安装 torch 安装 torch_npu

安装步骤

或者从这里下载:

torchtorch_npu

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

昇腾NPU PyTorch CANN 模型训练 环境配置
相关文章