更新时间:2024-04-30 GMT+08:00
分享

容器化个人调测环境搭建

步骤1:准备业务基础镜像

当前推荐的开发模式是在物理机上启动自己的docker容器进行开发。容器镜像可以使用自己的实际业务镜像,也可以使用ModelArts提供的基础镜像,ModelArts提供两种基础镜像:Ascend+PyTorch镜像、Ascend+Mindspore镜像。

  1. 根据所需要的环境拉取镜像。

    • 拉取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

  2. 启动容器镜像,注意多人多容器共用机器时,需要将卡号做好预先分配,不能使用其他容器已使用的卡号:

    #  启动容器,请注意指定容器名称、镜像信息。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

  3. 进入容器:

    docker exec -ti 上一命令中的自定义容器名称 bash

  4. 进入conda环境:

    source /home/ma-user/.bashrc
    cd ~

  5. 查看容器中可以使用的卡信息:

    npu-smi info
    如果命令报如下错误,则代表容器启动时指定的“ASCEND_VISIBLE_DEVICES”卡号已被其他容器占用,此时需要重新选择卡号并重新启动新的容器。
    图1 报错信息

  6. 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环境并进行测试

步骤2:(可选)配置容器SSH可访问

若在开发时,需要使用VS Code或SSH工具直接连接到容器中进行开发,需要进行以下配置。

  1. 进入容器后,执行SSH启动命令来启动SSH服务:

    ssh-keygen  -A
    /usr/sbin/sshd
    #  查看ssh进程已启动
    ps -ef |grep ssh

  2. 设置容器root密码,根据提示输入密码:

    passwd
    图3 设置root密码

  3. 执行exit命令退出容器,在宿主机上执行ssh测试:

    ssh root@宿主机IP -p 51234(映射的端口号)
    图4 执行ssh测试

    如果在宿主机执行ssh容器测试时报错Host key verification failed,可删除宿主机上的文件~/.ssh/known_host后再重试。

  4. 使用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的镜像,可参考如下章节进行安装。

  1. 查看容器内是否已安装CANN Toolkit,如果显示有版本号则已安装:

    cat /usr/local/Ascend/ascend-toolkit/latest/aarch64-linux/ascend_toolkit_install.info

  2. 如果未安装或需要升级版本,则需要从官网下载相关软件包,其中社区版可以直接下载(下载地址),商用版是权限受控,仅华为工程师和渠道用户有权限下载(下载链接)。

    安装CANN Toolkit,注意替换包名。
    chmod 700 *.run
    ./Ascend-cann-toolkit_6.3.RC2_linux-aarch64.run --full --install-for-all

  3. 如果已安装,但需要升级版本,注意替换包名:

    chmod 700 *.run
    ./Ascend-cann-toolkit_6.3.RC2_linux-aarch64.run --upgrade --install-for-all

步骤4:(可选)安装MindSpore Lite

当前预置镜像中已安装MindSpore Lite,如果需要替换版本或者使用自己的未预置MindSpore Lite的镜像,可参考如下章节进行安装。

  1. 查看容器中是否已安装MS Lite,如果已经显示出mindspore-lite软件信息和版本号,则是已经安装好的:

    pip show mindspore-lite

  2. 如果未安装,则从官网下载包(下载链接),下载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源:

    # 自动配置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下载大模型可以参考如下操作。

  1. 由于欧拉源上没有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

  2. 进入容器,执行安装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

  3. 设置git配置去掉ssl校验。

    git config --global http.sslVerify false

  4. 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

到此环境配置就结束了,后续可以根据相关的迁移指导书做业务迁移到昇腾的开发调测工作。

分享:

    相关文档

    相关产品