Installing Ascend-related Software (PyTorch + Ascend) on Ubuntu 20.04
Before using custom images in ModelArts, you need to use an official ModelArts image or a third-party image as a base on an ECS to write a Dockerfile, build the image, push it to Software Repository for Container (SWR), register it with ModelArts, and finally create a notebook instance for verification.
This section uses an ECS running Ubuntu 20.04 (Snt9b image) as an example to introduce the complete workflow of installing Ascend-related software (PyTorch + Ascend) and building a custom notebook image.
Prerequisites
You have signed up for a Huawei Cloud account, completed real-name authentication, and granted permissions before using ModelArts. For details, see 1. Preparations: Accounts and Permissions.
Billing
This operation involves costs for ECS, SWR, and notebook. Release resources promptly after completion to avoid continuous billing. For details about the billing, see ECS Billing, SWR Billing, and Notebook Billing.
Specifications and Constraints for Custom Notebook Images
When creating a custom image, the base image must meet the following specifications:
- Produced based on official open-source images such as the Ascend official website or Docker Hub. The open-source image must meet the following operating system constraints:
- You are advised to install CANN 8.0.0 or later. For details, see the Ascend community.
- The Dockerfile must contain ma-user-related configurations and the ipykernel dependency package; otherwise, notebook-related functions cannot be used.
ma-user is the system user for ModelArts notebook runtime. The image must pre-configure this user and its directory permissions.
- If the image has Jupyter static files, the notebook might not open. Run the jupyter --path command to see the relevant directories and delete the static files there.
- Training debug mode: Ensure that the curl command exists.
Custom Image Build Workflow

- Prepare a Linux server. In this example, an ECS is used.
- Create a custom image on the ECS. The Dockerfile sample file is provided.
- Upload the created image to SWR.
- Register an SWR image on ModelArts.
- Create a notebook instance and verify the new image.
Step 1: Preparing an ECS and Configuring the Environment
Purchase an Arm-based Ubuntu server in the Elastic Cloud Server (ECS) console and configure an Elastic IP (EIP).
Since Ascend NPUs only support the Arm architecture, you must select an Arm-based ECS.
- Log in to the ECS console, and click Buy ECS in the upper right corner of the Elastic Cloud Server page.
This guide uses custom purchase as an example. Set CPU Architecture to Kunpeng (i.e., Arm architecture), select Ubuntu 20.04 or 22.04 for OS, and configure other parameters as needed. For details, see Purchasing an ECS in Custom Config Mode.
- Log in to the ECS via Cloud Shell or VNC. For details, see Logging In to a Linux ECS.
- In the ECS, run the following command to install Docker:
wget https://cnnorth4-modelarts-sdk.obs.cn-north-4.myhuaweicloud.com/modelarts/custom-image-build/install_docker_on_ubuntu.sh bash install_docker_on_ubuntu.sh source /etc/profile
After the installation is complete, run the following command to check the Docker running status:
systemctl status docker
If active (running) is displayed in the output, Docker is running properly.
Figure 1 Checking the Docker status
- (Optional) Run the following command to check the Docker Engine version:
docker version | grep -A 1 Engine
If the version number is displayed in the output, Docker Engine has been successfully installed.
Figure 2 Viewing the Docker Engine version
Step 2: Creating a Custom Image
This section describes how to install the required software packages using a Dockerfile and build a new notebook image.
- Ascend-related software packages: Miniconda3, torch, torch-npu, cann-toolkit, and cann-910b-ops
- PyTorch framework dependency packages: torchvision, torchaudio, and numpy
- Notebook dependency package: ipykernel
- Query the base image for writing the Dockerfile (Skip this step for third-party images.)
For details about how to obtain the official ModelArts image address, see ModelArts Official Images.
- Access SWR.
- Log in to the SWR console, choose Dashboard in the navigation pane, and click Generate Login Command in the upper right corner. On the displayed page, click the copy button. The login command is used to complete the authentication between the Docker client and SWR, which is required for subsequently pushing images.Figure 3 Obtaining the login command
Select the validity period as needed. To obtain a long-term valid login command, see Obtaining a Long-Term Login or Image Push/Pull Command. After you obtain a long-term valid login command, your temporary login commands will still be valid as long as they are in their validity periods.
- Run the login command on the server where Docker is installed. The message Login Succeeded will be displayed upon a successful login.
- Log in to the SWR console, choose Dashboard in the navigation pane, and click Generate Login Command in the upper right corner. On the displayed page, click the copy button.
- Write the container image Dockerfile.
A Dockerfile is a text file with instructions to build a Docker image. It defines the image build process, such as the base image, software to install, files to copy, and environment variables.
- Example Dockerfile for Official ModelArts Images (HCE):
# ModelArts official image address. Replace it as needed. FROM swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_ascend:pytorch_2.7.1-cann_8.5.2-py_3.12-hce_2.0.2512-aarch64-snt9b23-20260417112518-aabfd52 # section1: Use yum sources + install system dependencies USER root RUN yum install -y zip wget ca-certificates vim python3 python3-pip tzdata openssh-server && \ ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN rm /bin/sh && ln -s /bin/bash /bin/sh # section2: Clear the CANN 8.5.2 that comes with the base image RUN sed -i '/Ascend.*set_env\.sh/d' /etc/bashrc /etc/profile /etc/profile.d/*.sh /home/ma-user/.bashrc 2>/dev/null || true && \ rm -rf /usr/local/Ascend/ascend-toolkit /usr/local/Ascend/cann-* /usr/local/Ascend/latest && \ rm -rf /usr/local/Ascend/nnae /usr/local/Ascend/tfplugin /usr/local/Ascend/toolbox && \ rm -rf /usr/local/Ascend/driver/lib64/plugin 2>/dev/null || true ENV ASCEND_AICPU_PATH="" \ ASCEND_OPP_PATH="" \ TOOLCHAIN_HOME="" \ ASCEND_HOME_PATH="" \ ASCEND_TOOLKIT_HOME="" USER ma-user # section3: Install Miniconda3 as user ma-user (Skip this step if the AArch64 version already exists.) RUN if [ ! -d /home/ma-user/anaconda3 ]; then \ cd /home/ma-user/ && \ wget --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-aarch64.sh && \ bash Miniconda3-latest-Linux-aarch64.sh -b -p /home/ma-user/anaconda3 && \ rm -rf Miniconda3-latest-Linux-aarch64.sh; \ else \ echo "anaconda3 already exists, skip installation"; \ fi # section4: Configure pip Tsinghua image source, initialize conda, and clear base image's Tsinghua conda source RUN rm -f /home/ma-user/.condarc /home/ma-user/.condarc.bak && \ mkdir -p /home/ma-user/.pip && \ echo -e "[global]\nindex-url = https://pypi.tuna.tsinghua.edu.cn/simple\n[install]\ntrusted-host = pypi.tuna.tsinghua.edu.cn" > /home/ma-user/.pip/pip.conf && \ /home/ma-user/anaconda3/bin/conda init bash && \ source /home/ma-user/anaconda3/bin/activate base && \ conda config --remove-key channels 2>/dev/null || true && \ conda config --remove-key default_channels 2>/dev/null || true # section5: Create PyTorch 2.6.0 dedicated conda virtual environment (Python 3.9) and install torch/torch_npu RUN /bin/bash -c '\ source /home/ma-user/anaconda3/bin/activate base && \ conda create -y -n pytorch_2_6 python=3.9.18 && \ conda run -n pytorch_2_6 \ pip install --index-url https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn \ torchvision==0.21.0 torchaudio==2.6.0 numpy==1.26.4 && \ cd /home/ma-user && \ wget --no-check-certificate https://download.pytorch.org/whl/cpu/torch-2.6.0%2Bcpu-cp39-cp39-manylinux_2_28_aarch64.whl && \ conda run -n pytorch_2_6 pip install torch-2.6.0+cpu-cp39-cp39-manylinux_2_28_aarch64.whl && \ wget --no-check-certificate https://gitcode.com/Ascend/pytorch/releases/download/v7.3.0-pytorch2.6.0/torch_npu-2.6.0.post5-cp39-cp39-manylinux_2_28_aarch64.whl && \ conda run -n pytorch_2_6 pip install torch_npu-2.6.0.post5-cp39-cp39-manylinux_2_28_aarch64.whl && \ conda run -n pytorch_2_6 pip install protobuf==3.20 && \ rm -f torch-2.6.0+cpu-cp39-cp39-manylinux_2_28_aarch64.whl torch_npu-2.6.0.post5-cp39-cp39-manylinux_2_28_aarch64.whl \ ' # section6: Install CANN toolkit/ops in the pytorch_2_6 conda environment RUN /bin/bash -c '\ source /home/ma-user/anaconda3/bin/activate base && \ conda run -n pytorch_2_6 \ pip install ascend-cann-toolkit==8.5.0 \ --extra-index-url https://ascend.devcloud.huaweicloud.com/cann/pypi/simple \ --trusted-host ascend.devcloud.huaweicloud.com && \ conda run -n pytorch_2_6 \ pip install ascend-cann-910b-ops==8.5.0 \ --extra-index-url https://ascend.devcloud.huaweicloud.com/cann/pypi/simple \ --trusted-host ascend.devcloud.huaweicloud.com \ ' # section7: Installation packages required for notebook RUN /bin/bash -c '\ source /home/ma-user/anaconda3/bin/activate base && \ conda run -n pytorch_2_6 \ pip install --index-url https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn \ ipykernel==6.7.0 \ ' # section8: Set environment variables (CANN installed under site-packages of the pytorch_2_6 conda environment) ENV CANN_HOME=/home/ma-user/anaconda3/envs/pytorch_2_6/lib/python3.9/site-packages/ascend/cann-8.5.0 ENV PATH=/home/ma-user/anaconda3/envs/pytorch_2_6/bin:${CANN_HOME}/bin:${CANN_HOME}/compiler/ccec_compiler/bin:$PATH \ LD_LIBRARY_PATH=${CANN_HOME}/aarch64-linux/lib64:${CANN_HOME}/aarch64-linux/lib64/plugin/opskernel:${CANN_HOME}/aarch64-linux/lib64/plugin/nnengine:${CANN_HOME}\:opp/built-in/op_impl/ai_core/tbe/op_tiling/lib/linux/aarch64:$LD_LIBRARY_PATH/tools/aml/lib64:$LD_LIBRARY_PATH/tools:$LD_LIBRARY_PATH \ PYTHONPATH=${CANN_HOME}/python/site-packages:${CANN_HOME}/opp/op_impl/built-in/ai_core/tbe:$PYTHONPATH \ ASCEND_AICPU_PATH=${CANN_HOME} \ ASCEND_OPP_PATH=${CANN_HOME}/opp \ ASCEND_HOME_PATH=${CANN_HOME} \ ASCEND_TOOLKIT_HOME=${CANN_HOME} \ TOOLCHAIN_HOME=${CANN_HOME} \ PYTHONUNBUFFERED=1 \ USE_TRITON=0 ENV LD_LIBRARY_PATH=/usr/local/Ascend/toolbox/latest/Ascend-DMI/lib64:/usr/lib/aarch64-linux-gnu/hdf5/serial:/usr/local/Ascend/driver/lib64:/usr/local/Ascend/driver/lib64/common:/usr/local/Ascend/driver/lib64/driver:/usr/local/Ascend/ascend-toolkit/latest/lib64:/usr/local/Ascend/ascend-toolkit/latest/compiler/lib64/plugin/opskernel:/usr/local/Ascend/ascend-toolkit/latest/compiler/lib64/plugin/nnengine:/usr/local/Ascend/ascend-toolkit/latest/opp/built-in/op_impl/ai_core/tbe/op_tiling/lib/:$LD_LIBRARY_PATH \ PYTHONPATH=/usr/local/Ascend/ascend-toolkit/latest/tools/ms_fmk_transplt/torch_npu_bridge:/usr/local/Ascend/ascend-toolkit/latest/python/site-packages:$PYTHONPATH RUN echo "source ${CANN_HOME}/set_env.sh" >> /home/ma-user/.bashrc USER ma-user WORKDIR /home/ma-user - Example Dockerfile for non-official ModelArts images:
If pulling a non-official ModelArts image and you encounter connection refused or Client.Timeout exceeded errors when accessing https://registry-1.docker.io/v2/, you need to configure a Docker proxy.
- Run the following command to edit the configuration file:
vi /etc/docker/daemon.json
- Add the following configuration:
{ "registry-mirrors":[ "https://docker.m.daocloud.io", "https://docker.jianmuhub.com", "https://huecker.io", "https://dockerhub.timeweb.cloud", "https://dockerhub1.beget.com", "https://noohub.ru"] } - Run the following commands sequentially to make the configuration take effect:
systemctl daemon-reload
systemctl restart docker
FROM ubuntu:20.04 ENV DEBIAN_FRONTEND=noninteractive # section1: Create the ma-user user group and user USER root RUN default_user=$(getent passwd 1000 | awk -F ':' '{print $1}') || echo "uid: 1000 does not exist" && \ default_group=$(getent group 100 | awk -F ':' '{print $1}') || echo "gid: 100 does not exist" && \ if [ ! -z "${default_user}" ] && [ "${default_user}" != "ma-user" ]; then \ userdel -r ${default_user}; \ fi && \ if [ ! -z "${default_group}" ] && [ "${default_group}" != "ma-group" ]; then \ groupdel -f ${default_group}; \ fi && \ if ! getent group 100 > /dev/null; then \ groupadd -g 100 ma-group; \ fi && \ useradd -d /home/ma-user -m -u 1000 -g 100 -s /bin/bash ma-user && \ chmod -R 750 /home/ma-user # section2: Use standard focal sources (ports sources for arm64 architecture) and install system Python3 and pip RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak && \ printf "deb http://ports.ubuntu.com/ubuntu-ports/ focal main restricted universe multiverse\n\ deb http://ports.ubuntu.com/ubuntu-ports/ focal-updates main restricted universe multiverse\n\ deb http://ports.ubuntu.com/ubuntu-ports/ focal-backports main restricted universe multiverse\n\ deb http://ports.ubuntu.com/ubuntu-ports/ focal-security main restricted universe multiverse\n" > /etc/apt/sources.list && \ apt-get update && \ apt-get install -y zip wget ca-certificates vim python3 python3-pip tzdata && \ ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ dpkg-reconfigure --frontend noninteractive tzdata && \ apt update && echo Y | apt install openssh-server RUN rm /bin/sh && ln -s /bin/bash /bin/sh # section3: Install Miniconda3 as ma-user (AArch64 version) USER ma-user RUN cd /home/ma-user/ && \ wget --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-aarch64.sh && \ bash Miniconda3-latest-Linux-aarch64.sh -b -p /home/ma-user/anaconda3 && \ rm -rf Miniconda3-latest-Linux-aarch64.sh # section4: Configure conda and pip Tsinghua mirrors and initialize conda RUN mkdir -p /home/ma-user/.pip && \ echo -e "channels:\nshow_channel_urls: true\ndefault_channels:\n - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main\nremote_read_timeout: 120" > /home/ma-user/.condarc && \ echo -e "[global]\nindex-url = https://pypi.tuna.tsinghua.edu.cn/simple\n[install]\ntrusted-host = pypi.tuna.tsinghua.edu.cn" > /home/ma-user/.pip/pip.conf && \ /home/ma-user/anaconda3/bin/conda init bash && \ source /home/ma-user/anaconda3/bin/activate base && \ conda config --remove-key channels || true && \ conda config --append channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge && \ conda config --append channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main && \ conda tos accept --override-channels -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main # section5: Create PyTorch 2.6.0 dedicated conda virtual environment (Python 3.9) and install torch/torch_npu RUN /bin/bash -c '\ source /home/ma-user/anaconda3/bin/activate base && \ conda create -y --override-channels \ -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge \ -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main \ -n pytorch_2_6 python=3.9 && \ conda run -n pytorch_2_6 \ pip install --index-url https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn \ torchvision==0.21.0 torchaudio==2.6.0 numpy==1.26.4 && \ cd /home/ma-user && \ conda run -n pytorch_2_6 pip install --index-url https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn \ torch==2.6.0 && \ wget --no-check-certificate https://gitcode.com/Ascend/pytorch/releases/download/v7.3.0-pytorch2.6.0/torch_npu-2.6.0.post5-cp39-cp39-manylinux_2_28_aarch64.whl && \ conda run -n pytorch_2_6 pip install torch_npu-2.6.0.post5-cp39-cp39-manylinux_2_28_aarch64.whl && \ conda run -n pytorch_2_6 pip install protobuf==3.20 && \ rm -f torch_npu-2.6.0.post5-cp39-cp39-manylinux_2_28_aarch64.whl \ ' # section6: Install CANN toolkit/ops in the pytorch_2_6 conda environment RUN /bin/bash -c '\ source /home/ma-user/anaconda3/bin/activate base && \ conda run -n pytorch_2_6 \ pip install ascend-cann-toolkit==8.5.0 \ --extra-index-url https://ascend.devcloud.huaweicloud.com/cann/pypi/simple \ --trusted-host ascend.devcloud.huaweicloud.com && \ conda run -n pytorch_2_6 \ pip install ascend-cann-910b-ops==8.5.0 \ --extra-index-url https://ascend.devcloud.huaweicloud.com/cann/pypi/simple \ --trusted-host ascend.devcloud.huaweicloud.com \ ' # section7: Installation packages required for notebook RUN /bin/bash -c '\ source /home/ma-user/anaconda3/bin/activate base && \ conda run -n pytorch_2_6 \ pip install --index-url https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn \ ipykernel==6.7.0 \ ' # section8: Set environment variables (CANN installed under site-packages of the pytorch_2_6 conda environment) ENV CANN_HOME=/home/ma-user/anaconda3/envs/pytorch_2_6/lib/python3.9/site-packages/ascend/cann-8.5.0 ENV PATH=/home/ma-user/anaconda3/envs/pytorch_2_6/bin:${CANN_HOME}/bin:${CANN_HOME}/compiler/ccec_compiler/bin:$PATH \ LD_LIBRARY_PATH=${CANN_HOME}/aarch64-linux/lib64:${CANN_HOME}/aarch64-linux/lib64/plugin/opskernel:${CANN_HOME}/aarch64-linux/lib64/plugin/nnengine:${CANN_HOME}\:opp/built-in/op_impl/ai_core/tbe/op_tiling/lib/linux/aarch64:$LD_LIBRARY_PATH/tools/aml/lib64:$LD_LIBRARY_PATH/tools:$LD_LIBRARY_PATH \ PYTHONPATH=${CANN_HOME}/python/site-packages:${CANN_HOME}/opp/op_impl/built-in/ai_core/tbe:$PYTHONPATH \ ASCEND_AICPU_PATH=${CANN_HOME} \ ASCEND_OPP_PATH=${CANN_HOME}/opp \ ASCEND_HOME_PATH=${CANN_HOME} \ ASCEND_TOOLKIT_HOME=${CANN_HOME} \ TOOLCHAIN_HOME=${CANN_HOME} \ PYTHONUNBUFFERED=1 \ USE_TRITON=0 ENV LD_LIBRARY_PATH=/usr/local/Ascend/toolbox/latest/Ascend-DMI/lib64:/usr/lib/aarch64-linux-gnu/hdf5/serial:/usr/local/Ascend/driver/lib64:/usr/local/Ascend/driver/lib64/common:/usr/local/Ascend/driver/lib64/driver:/usr/local/Ascend/ascend-toolkit/latest/lib64:/usr/local/Ascend/ascend-toolkit/latest/compiler/lib64/plugin/opskernel:/usr/local/Ascend/ascend-toolkit/latest/compiler/lib64/plugin/nnengine:/usr/local/Ascend/ascend-toolkit/latest/opp/built-in/op_impl/ai_core/tbe/op_tiling/lib/:$LD_LIBRARY_PATH \ PYTHONPATH=/usr/local/Ascend/ascend-toolkit/latest/tools/ms_fmk_transplt/torch_npu_bridge:/usr/local/Ascend/ascend-toolkit/latest/python/site-packages:$PYTHONPATH RUN echo "source ${CANN_HOME}/set_env.sh" >> /home/ma-user/.bashrc USER ma-user WORKDIR /home/ma-user - Run the following command to edit the configuration file:
- Example Dockerfile for Official ModelArts Images (HCE):
- Create the container image.
In the directory containing the Dockerfile, run the following command to build the container image. Modify the SWR image address in the command as needed. The build time depends on network bandwidth and image size, typically taking around 30 minutes.
docker build -t swr.cn-southwest-2.myhuaweicloud.com/dev-custom/pytorch2_6-cann8.5.0:v2 -f Dockerfile .
If Successfully built and Successfully tagged are displayed in the output, the image has been successfully built.
Figure 4 Container image built successfully
Step 3: Pushing the Image to SWR
- Run the following command to upload the locally built image to SWR:
docker push swr.cn-southwest-2.myhuaweicloud.com/dev-custom/pytorch2_6-cann8.5.0:v2
If digest and the SHA256 hash value are displayed in the output, the image has been successfully uploaded to SWR.

- In the navigation pane of the SWR console, choose My Images. Refresh the page to view the new image. Click the image name to view its details.
Step 4: Registering the Image with ModelArts
Register the new image with ModelArts image management so that you can use it in ModelArts. For details, see Image Registration and Management.
Set SWR Source to the image pushed to SWR in step 3. Since the installation packages above were completed under an Arm-based image, select Arm for the architecture type, NPU for the type, and Snt9b for the specification.
Step 5: Creating a Notebook Instance and Verifying the New Image
- Create a notebook instance.
- In the left navigation pane on the ModelArts console, perform the following operations to go to the notebook management page:
- New console: Choose Model Build > Notebook.
- Old console: Choose Development Space > Notebook.
- In the upper right corner of the Notebook page, click Create.
In the Resource area, select NPU for the instance specification. In the Environment area, select Custom Images, click
, select the image and version registered in step 4, and select JupyterLab for WebIDE.For details about the parameters for creating a notebook instance, see Creating a Notebook Instance.Figure 6 Creating a notebook instance
If the notebook instance status is Running, the notebook instance has been created.
- In the left navigation pane on the ModelArts console, perform the following operations to go to the notebook management page:
- On the Notebook page, click Access Environment in the Operation column. In the Access Method dialog box, click Access on the right of JupyterLab Access.
- In the Notebook area on the ModelArts Launcher page, click pytorch_2_6 to create an IPYNB file. Figure 7 Opening pytorch_2_6
- Import the PyTorch library and check the PyTorch version:
import torch print(torch.__version__)
If the following version information is displayed, PyTorch is installed.
Figure 8 Checking the PyTorch version
- In the Other area on the ModelArts Launcher page, click Terminal and run the command below to check whether the PyTorch framework and torch_npu plugin are successfully installed. For details, see Download. Figure 9 Terminal
python3 -c "import torch;import torch_npu; a = torch.randn(3, 4).npu(); print(a + a);"
If information similar to the following is displayed, the installation is successful:
tensor([[-0.6066, 6.3385, 0.0379, 3.3356], [ 2.9243, 3.3134, -1.5465, 0.1916], [-2.1807, 0.2008, -1.1431, 2.1523]], device='npu:0')Figure 10 PyTorch framework and torch_npu plugin installed
- Run the following command in the terminal to check whether the CANN package is successfully installed. For details, see CANN Installation.
python3 -c "import acl;print(acl.get_soc_name())"
If Ascend910B4 is returned, the installation is successful.
Figure 11 CANN package installed
What is your overall rating for this page?
Thank you very much for your feedback. We will continue working to improve the documentation.See the reply and handling status in My Cloud VOC.
For any further questions, feel free to contact us through the chatbot.
Chatbot