容器化个人调测环境搭建
步骤1:准备业务基础镜像
当前推荐的开发模式是在物理机上启动自己的docker容器进行开发。容器镜像可以使用自己的实际业务镜像,也可以使用ModelArts提供的基础镜像,ModelArts提供两种基础镜像:Ascend+PyTorch镜像、Ascend+Mindspore镜像。
- 根据所需要的环境拉取镜像。
- 拉取Ascend+PyTorch镜像:
# 配套Snt9b的容器镜像,包含pytorch 1.11 + mindspore-lite 2.2.0 + Ascend CANN Toolkit 7.0.1 docker pull swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_1_11_ascend:pytorch_1.11.0-cann_7.0.1-py_3.9-euler_2.10.7-aarch64-snt9b-20231107190844-50a1a83
- 拉取Ascend+Mindspore镜像:
# 配套Snt9b的容器镜像,包含mindspore 2.2.0 + mindspore-lite 2.2.0 + Ascend CANN Toolkit 7.0.1 docker pull swr.cn-southwest-2.myhuaweicloud.com/atelier/mindspore_2_2_ascend:mindspore_2.2.0-cann_7.0.1-py_3.9-euler_2.10.7-aarch64-snt9b-20231107190844-50a1a83
- 拉取Ascend+PyTorch镜像:
- 启动容器镜像,注意多人多容器共用机器时,需要将卡号做好预先分配,不能使用其他容器已使用的卡号:
# 启动容器,请注意指定容器名称、镜像信息。ASCEND_VISIBLE_DEVICES指定容器要用的卡,0-1,3代表0 1 3这3块卡,-用于指定范围 # -v /home:/home_host是指将宿主机home目录挂载到容器home_host目录,建议在容器中使用该挂载目录进行代码和数据的存储以便持久化 docker run -itd --cap-add=SYS_PTRACE -e ASCEND_VISIBLE_DEVICES=0 -v /home:/home_host -p 51234:22 -u=0 --name 自定义容器名称 上一步拉取的镜像SWR地址 /bin/bash
- 进入容器:
docker exec -ti 上一命令中的自定义容器名称 bash
- 进入conda环境:
source /home/ma-user/.bashrc cd ~
- 查看容器中可以使用的卡信息:
npu-smi info
如果命令报如下错误,则代表容器启动时指定的“ASCEND_VISIBLE_DEVICES”卡号已被其他容器占用,此时需要重新选择卡号并重新启动新的容器。图1 报错信息
- npu-smi info检测正常后,可以执行一段命令进行简单的容器环境测试,能正常输出运算结果代表容器环境正常可用。
- pytorch镜像测试:
python3 -c "import torch;import torch_npu; a = torch.randn(3, 4).npu(); print(a + a);"
- mindspore镜像测试:
# 由于mindspore的run_check程序当前未适配Snt9b,需要先设置2个环境变量才能测试 unset MS_GE_TRAIN unset MS_ENABLE_GE python -c "import mindspore;mindspore.set_context(device_target='Ascend');mindspore.run_check()" # 测试完需要恢复环境变量,实际跑训练业务的时候需要用到 export MS_GE_TRAIN=1 export MS_ENABLE_GE=1
图2 进入conda环境并进行测试
- pytorch镜像测试:
步骤2:(可选)配置容器SSH可访问
若在开发时,需要使用VS Code或SSH工具直接连接到容器中进行开发,需要进行以下配置。
- 进入容器后,执行SSH启动命令来启动SSH服务:
ssh-keygen -A /usr/sbin/sshd # 查看ssh进程已启动 ps -ef |grep ssh
- 设置容器root密码,根据提示输入密码:
passwd
图3 设置root密码
- 执行exit命令退出容器,在宿主机上执行ssh测试:
ssh root@宿主机IP -p 51234(映射的端口号)
图4 执行ssh测试
如果在宿主机执行ssh容器测试时报错Host key verification failed,可删除宿主机上的文件~/.ssh/known_host后再重试。
- 使用VS Code SSH连接容器环境。
如果之前未使用过VS Code SSH功能,可参考 Step1 添加Remote-SSH插件进行VSCode环境安装和Remote-SSH插件安装。
打开VSCode Terminal,执行如下命令在本地计算机生成密钥对,如果您已经有一个密钥对,则可以跳过此步骤:
ssh-keygen -t rsa
将公钥添加到远程服务器的授权文件中,注意替换服务器IP以及容器的端口号:
cat ~/.ssh/id_rsa.pub | ssh root@服务器IP -p 容器端口号 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
打开VSCode的Remote-SSH配置文件,添加SSH配置项,注意替换服务器IP以及容器的端口号:Host Snt9b-dev HostName 服务器IP User root port 容器SSH端口号 identityFile ~\.ssh\id_rsa StrictHostKeyChecking no UserKnownHostsFile /dev/null ForwardAgent yes
注意:这里是使用密钥登录,如果需要使用密码登录,请去掉identityFile配置,并在连接过程中根据提示多次输入密码。
连接成功后安装python插件,请参考安装Python插件。
步骤3:(可选)安装CANN Toolkit
当前ModelArts提供的预置镜像中已安装CANN Toolkit,如果需要替换版本或者使用自己的未预置CANN Toolkit的镜像,可参考如下章节进行安装。
- 查看容器内是否已安装CANN Toolkit,如果显示有版本号则已安装:
cat /usr/local/Ascend/ascend-toolkit/latest/aarch64-linux/ascend_toolkit_install.info
- 如果未安装或需要升级版本,则需要从官网下载相关软件包,其中社区版可以直接下载(下载地址),商用版是权限受控,仅华为工程师和渠道用户有权限下载(下载链接)。
安装CANN Toolkit,注意替换包名。
chmod 700 *.run ./Ascend-cann-toolkit_6.3.RC2_linux-aarch64.run --full --install-for-all
- 如果已安装,但需要升级版本,注意替换包名:
chmod 700 *.run ./Ascend-cann-toolkit_6.3.RC2_linux-aarch64.run --upgrade --install-for-all
步骤4:(可选)安装MindSpore Lite
当前预置镜像中已安装MindSpore Lite,如果需要替换版本或者使用自己的未预置MindSpore Lite的镜像,可参考如下章节进行安装。
- 查看容器中是否已安装MS Lite,如果已经显示出mindspore-lite软件信息和版本号,则是已经安装好的:
pip show mindspore-lite
- 如果未安装,则从官网下载包(下载链接),下载whl包和tar.gz包并执行安装,注意替换包名:
pip install mindspore_lite-2.1.0-cp37-cp37m-linux_aarch64.whl mkdir -p /usr/local/mindspore-lite tar -zxvf mindspore-lite-2.1.0-linux-aarch64.tar.gz -C /usr/local/mindspore-lite --strip-components 1
步骤5:配置pip源和yum源
- 配置pip源
使用ModelArts提供的预置镜像中pip源已经直接配置好可用,如果用户使用自己的业务镜像,可参考步骤5:(可选)安装pip进行配置。
- 配置yum源
# 自动配置yum源 wget http://mirrors.myhuaweicloud.com/repo/mirrors_source.sh && bash mirrors_source.sh # 测试 yum update --allowerasing --skip-broken --nobest
步骤6:git操作
git clone和git lfs下载大模型可以参考如下操作。
- 由于欧拉源上没有git-lfs包,所以需要从压缩包中解压使用,在浏览器中输入如下地址下载git-lfs压缩包并上传到服务器的/home目录下,该目录在容器启动时挂载到容器/home_host目录下,这样在容器中可以直接使用。
https://github.com/git-lfs/git-lfs/releases/download/v3.2.0/git-lfs-linux-arm64-v3.2.0.tar.gz
- 进入容器,执行安装git lfs命令。
cd /home_host tar -zxvf git-lfs-linux-arm64-v3.2.0.tar.gz cd git-lfs-3.2.0 sh install.sh
- 设置git配置去掉ssl校验。
git config --global http.sslVerify false
- git clone代码仓,以diffusers为例(注意替换用户个人开发目录)。
# git clone diffusers源码,-b参数可指定分支,注意替换用户个人开发目录 cd /home_host/用户个人目录 mkdir sd cd sd git clone https://github.com/huggingface/diffusers.git -b v0.11.1-patch
git clone huggingface上的模型,以SD模型为例。如果下载时若出现“SSL_ERROR_SYSCALL”报错,多重试几次即可。另外由于网络限制以及文件较大,下载可能很慢需要数个小时,如果重试多次还是失败,建议直接从网站下载大文件后上传到服务器/home目录的个人开发目录中。如果下载时需要跳过大文件,可以设置GIT_LFS_SKIP_SMUDGE=1
git lfs install git clone https://huggingface.co/runwayml/stable-diffusion-v1-5 -b onnx
图5 代码下载成功
步骤7:容器环境保存镜像
配置好环境后可以进行业务代码的开发调试。通常为了避免机器重启后环境丢失,建议将已经配好的环境保存成新的镜像,命令如下:
# 查看需要保存为镜像的容器ID docker ps # 保存镜像 docker commit 容器ID 自定义镜像名:自定义镜像tag # 查看已保存的镜像 docker images # 如果需要将镜像分享给其他人在其他环境使用,可将镜像保存为本地文件,该命令耗时较久,保存完后ls可查看到文件 docker save -o 自定义名称.tar 镜像名:镜像tag # 其他机器上使用时加载文件,加载好后docker images即可查看到该镜像 docker load --input 自定义名称.tar
到此环境配置就结束了,后续可以根据相关的迁移指导书做业务迁移到昇腾的开发调测工作。