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

参考文章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

相关推荐
云空2 小时前
《基于Pytorch实现的声音分类 :网页解读》
人工智能·pytorch·分类
Re_draw_debubu9 小时前
torchvision中数据集的使用与DataLoader 小土堆pytorch记录
pytorch·python·小土堆
天下弈星~10 小时前
变分自编码器VAE的Pytorch实现
图像处理·pytorch·python·深度学习·vae·图像生成·变分自编码器
盼小辉丶1 天前
PyTorch生成式人工智能——基于Transformer实现文本转语音
人工智能·pytorch·transformer
xw33734095641 天前
《卷积神经网络(CNN):解锁视觉与多模态任务的深度学习核心》
人工智能·pytorch·深度学习·神经网络·cnn
西西弗Sisyphus1 天前
一个基于 PyTorch 的完整模型训练流程
人工智能·pytorch·机器学习
雪可问春风2 天前
YOLOv8 训练报错:PyTorch 2.6+ 模型加载兼容性问题解决
人工智能·pytorch·yolo
钢铁男儿2 天前
PyTorch基础(使用Tensor及Antograd实现机器学习)
人工智能·pytorch·机器学习
数据饕餮3 天前
Pytorch深度学习框架实战教程-番外篇05-Pytorch全连接层概念定义、工作原理和作用
人工智能·pytorch·深度学习