昇腾社区首页
中文
注册

安装MindIE Turbo(容器化)

本章节以Atlas 800I A2 推理服务器A800I A2、Ubuntu24.04为基础镜像为例,指导用户如何构建MindIE Turbo的Arm和x86两种架构的镜像文件,以及启动容器化部署MindIE Turbo,请确保服务器能够连接稳定的网络。

OpenEuler和Ubuntu镜像的构建方式差异点,主要在于依赖包的安装方式不同。

前提条件

  • 宿主机已经安装过NPU驱动和固件。如未安装,请参见《CANN 软件安装指南》中的“选择安装场景”章节(商用版)或“选择安装场景”章节(社区版),按如下方式选择安装场景,按“安装NPU驱动和固件”章节进行安装。
    • 安装方式:选择“在物理机上安装”。
    • 操作系统:选择使用的操作系统,MindIE支持的操作系统请参见《MindIE安装指南》中的“安装说明”章节
    • 业务场景:选择“训练&推理&开发调试”。
  • 用户在宿主机自行安装Docker(版本要求大于或等于24.x.x),安装方式可参考Docker官方安装文档。可通过如下方式查看当前Docker版本:
    docker --version
  • 确保服务器能够连接稳定的网络。因为构建过程中需在线下载多个资源,包括Python源码、编译工具以及各种依赖等,无法离线构建。
  • 构建镜像的环境必须满足以下条件:
    表1 Docker版本

    Docker

    Docker Compose

    >=24.x.x

    >=2

操作步骤

  • 构建MindIE Turbo Arm架构镜像文件
    1. 使用wget下载Python 3.11.10源码包,放置于某一目录下,如“/home/package”。
      wget https://www.python.org/ftp/python/3.11.10/Python-3.11.10.tgz
    2. 参见表2,将获取的Arm架构MindIE Turbo软件包、CANN软件包、PyTorch软件包(包括torch_npu、torch)放于如上“/home/package”目录。
    3. 在“/home/package”路径下编写Dockerfile和docker-compose.yml,其文件目录结构如下:
      .
      ├── Ascend-cann-kernels-910b_8.2.RC2_linux-aarch64.run
      ├── Ascend-cann-nnal_8.2.RC2_linux-aarch64.run
      ├── Ascend-cann-toolkit_8.2.RC2_linux-aarch64.run
      ├── Ascend-mindie-turbo_2.1.RC2_py311_linux_aarch64.tar.gz
      ├── Dockerfile
      ├── docker-compose.yml
      ├── Python-3.11.10.tgz
      ├── torch-2.5.1-cp311-cp311-linux_aarch64.whl
      ├── pytorch-v7.0.0-pytorch2.5.1.tar.gz
      1. 编写Dockerfile文件。

        该Dockerfile默认使用Ubuntu24.04、Arm架构以及Python 3.11,仅作为参考,请根据实际情况自行修改。

        FROM ubuntu:24.04 AS python-installer 
        
        ENV DEBIAN_FRONTEND=noninteractive
        ENV TZ=Asia/Shanghai
        ENV TERM=xterm-256color
        
        # # Configure the Ubuntu mirror. An example is provided below:
        RUN echo "deb http://mirrors.tools.huawei.com/ubuntu-ports/ noble main restricted universe multiverse" > /etc/apt/sources.list && \
            echo "deb-src http://mirrors.tools.huawei.com/ubuntu-ports/ noble main restricted universe multiverse" >> /etc/apt/sources.list && \
            echo "deb http://mirrors.tools.huawei.com/ubuntu-ports/ noble-updates main restricted universe multiverse" >> /etc/apt/sources.list && \
            echo "deb-src http://repo.huaweicloud.com/ubuntu-ports/ noble-updates main restricted universe multiverse" >> /etc/apt/sources.list && \
            echo "deb http://repo.huaweicloud.com/ubuntu-ports/ noble-backports main restricted universe multiverse" >> /etc/apt/sources.list && \
            echo "deb-src http://repo.huaweicloud.com/ubuntu-ports/ noble-backports main restricted universe multiverse" >> /etc/apt/sources.list && \
            echo "deb http://ports.ubuntu.com/ubuntu-ports/ noble-security main restricted universe multiverse" >> /etc/apt/sources.list && \
            echo "deb-src http://ports.ubuntu.com/ubuntu-ports/ noble-security main restricted universe multiverse" >> /etc/apt/sources.list
        
        RUN apt-get update && \
            apt-get upgrade -y
        
        # Runtime Dependencies
        RUN set -eux; \
            apt-mark hold python*; \
            apt-get install -y --no-install-recommends \
                apt-transport-https \
                ca-certificates \
                bash \
                curl \
                locales \
                netbase \
                tzdata \
                wget \
                vim \
                git \
                libreadline-dev \
                gcc \
                g++ \
                make \
                cmake \
                libc6 \
                build-essential \
                libssl-dev \
                zlib1g \
                zlib1g-dev \
                libncurses5-dev \
                libbz2-dev \
                libreadline-dev \
                libsqlite3-dev \
                libffi-dev \
                libnss3-dev \
                libgdbm-dev \
                liblzma-dev \
                libev-dev \
            ; \
            apt-get clean && \
            rm -rf /var/lib/apt/lists/* && \
            rm -rf /rmp/* && \
            rm -rf /var/lib/apt/lists/*
        
        
        COPY  ./packages/Python-3.11.10.tgz /tmp/
        
        ENV PATH=/usr/local/python3.11.10/bin:$PATH
        ENV LANG C.UTF-8
        
        RUN tar -xf /tmp/Python-3.11.10.tgz -C /tmp && \
            cd /tmp/Python-3.11.10 && \
            mkdir -p /usr/local/python3.11.10/lib && \
            ./configure --enable-shared  LDFLAGS="-Wl,-rpath /usr/local/python3.11.10/lib" --prefix=/usr/local/python3.11.10 && \
            make -j $(nproc) && \
            make altinstall && \
            ln -sf /usr/local/python3.11.10/bin/python3.11 /usr/local/python3.11.10/bin/python3 && \
            ln -sf /usr/local/python3.11.10/bin/pip3.11 /usr/local/python3.11.10/bin/pip3 && \
            ln -sf /usr/local/python3.11.10/bin/python3 /usr/local/python3.11.10/bin/python && \
            ln -sf /usr/local/python3.11.10/bin/pip3 /usr/local/python3.11.10/bin/pip && \
            rm -rf /tmp/*
        
        
        #添加pip镜像源防止pip install超时
        RUN mkdir ~/.pip  && \
            echo "[global]" > ~/.pip/pip.conf && \
            echo "index-url = http://mirrors.aliyun.com/pypi/simple/" >> ~/.pip/pip.conf && \
            echo "trusted-host = mirrors.aliyun.com" >> ~/.pip/pip.conf && \
            pip3 install \
            --disable-pip-version-check \
            --no-cache-dir \
            --no-compile \
            'setuptools==65.5.1' \
            wheel 
        
        ################################################## CANN builder ##################################################
        FROM python-installer  AS cann_installer
        
        ARG DEVICE
        ARG CANN_VERSION
        ARG ARCH
        
        RUN pip install --no-cache-dir --upgrade pip
        RUN pip install --no-cache-dir \
                attrs cython numpy==1.24.0 decorator sympy cffi pyyaml pathlib2 \
                psutil protobuf==3.20 scipy requests absl-py
        
        COPY ./packages_blue/Ascend-cann-kernels-910b_8.2.RC2_linux-aarch64.run ./packages_blue/Ascend-cann-nnal_8.2.RC2_linux-aarch64.run ./packages_blue/Ascend-cann-toolkit_8.2.RC2_linux-aarch64.run /tmp/
        
        RUN chmod +x /tmp/*.run && \
            ./tmp/Ascend-cann-toolkit_*linux-*.run --quiet --install --install-for-all && \
            ./tmp/Ascend-cann-kernels-*_linux-*.run --quiet --install --install-for-all && \
            . /usr/local/Ascend/ascend-toolkit/set_env.sh && \
            ./tmp/Ascend-cann-nnal_*_linux-*.run --quiet --install --install-for-all && \
            rm -rf /tmp/*
        
        ################################################## Install CANN ##################################################
        FROM python-installer AS cann
        
        # Note: Toolkit Environment variables, obtained from /usr/local/Ascend/ascend-toolkit/set_env.sh
        ENV ASCEND_TOOLKIT_HOME=/usr/local/Ascend/ascend-toolkit/latest
        ENV LD_LIBRARY_PATH=/usr/local/Ascend/driver/lib64/common/:/usr/local/Ascend/driver/lib64/driver/:$LD_LIBRARY_PATH
        ENV LD_LIBRARY_PATH=${ASCEND_TOOLKIT_HOME}/lib64:${ASCEND_TOOLKIT_HOME}/lib64/plugin/opskernel:${ASCEND_TOOLKIT_HOME}/lib64/plugin/nnengine:${ASCEND_TOOLKIT_HOME}/opp/built-in/op_impl/ai_core/tbe/op_tiling:$LD_LIBRARY_PATH
        ENV LD_LIBRARY_PATH=${ASCEND_TOOLKIT_HOME}/tools/aml/lib64:${ASCEND_TOOLKIT_HOME}/tools/aml/lib64/plugin:$LD_LIBRARY_PATH
        ENV PYTHONPATH=${ASCEND_TOOLKIT_HOME}/python/site-packages:${ASCEND_TOOLKIT_HOME}/opp/built-in/op_impl/ai_core/tbe:$PYTHONPATH
        ENV PATH=${ASCEND_TOOLKIT_HOME}/bin:${ASCEND_TOOLKIT_HOME}/compiler/ccec_compiler/bin:${ASCEND_TOOLKIT_HOME}/tools/ccec_compiler/bin:$PATH
        ENV ASCEND_AICPU_PATH=${ASCEND_TOOLKIT_HOME}
        ENV ASCEND_OPP_PATH=${ASCEND_TOOLKIT_HOME}/opp
        ENV TOOLCHAIN_HOME=${ASCEND_TOOLKIT_HOME}/toolkit
        ENV ASCEND_HOME_PATH=${ASCEND_TOOLKIT_HOME}
        
        # Note: NNAL Environment variables, obtained from /usr/local/Ascend/nnal/set_env.sh
        ENV ATB_HOME_PATH=/usr/local/Ascend/nnal/atb/latest/atb/cxx_abi_0
        ENV LD_LIBRARY_PATH=${ATB_HOME_PATH}/lib:${ATB_HOME_PATH}/examples:${ATB_HOME_PATH}/tests/atbopstest:${LD_LIBRARY_PATH}
        ENV PATH=${ATB_HOME_PATH}/bin:$PATH
        
        ENV ATB_STREAM_SYNC_EVERY_KERNEL_ENABLE=0
        ENV ATB_STREAM_SYNC_EVERY_RUNNER_ENABLE=0
        ENV ATB_STREAM_SYNC_EVERY_OPERATION_ENABLE=0
        ENV ATB_OPSRUNNER_SETUP_CACHE_ENABLE=1
        ENV ATB_OPSRUNNER_KERNEL_CACHE_TYPE=3
        ENV ATB_OPSRUNNER_KERNEL_CACHE_LOCAL_COUNT=1
        ENV ATB_OPSRUNNER_KERNEL_CACHE_GLOABL_COUNT=5
        ENV ATB_OPSRUNNER_KERNEL_CACHE_TILING_SIZE=10240
        ENV ATB_WORKSPACE_MEM_ALLOC_ALG_TYPE=1
        ENV ATB_WORKSPACE_MEM_ALLOC_GLOBAL=0
        ENV ATB_COMPARE_TILING_EVERY_KERNEL=0
        ENV ATB_HOST_TILING_BUFFER_BLOCK_NUM=128
        ENV ATB_DEVICE_TILING_BUFFER_BLOCK_NUM=32
        ENV ATB_SHARE_MEMORY_NAME_SUFFIX=""
        ENV ATB_LAUNCH_KERNEL_WITH_TILING=1
        ENV ATB_MATMUL_SHUFFLE_K_ENABLE=1
        ENV ATB_RUNNER_POOL_SIZE=64
        ENV ASDOPS_HOME_PATH=${ATB_HOME_PATH}
        ENV ASDOPS_MATMUL_PP_FLAG=1
        ENV ASDOPS_LOG_LEVEL=ERROR
        ENV ASDOPS_LOG_TO_STDOUT=0
        ENV ASDOPS_LOG_TO_FILE=1
        ENV ASDOPS_LOG_TO_FILE_FLUSH=0
        ENV ASDOPS_LOG_TO_BOOST_TYPE=atb
        ENV ASDOPS_LOG_PATH=/root
        ENV ASDOPS_TILING_PARSE_CACHE_DISABLE=0
        ENV LCCL_DETERMINISTIC=0
        ENV LCCL_PARALLEL=0 
        
        COPY --from=cann_installer /usr/local/Ascend /usr/local/Ascend
        COPY --from=cann_installer /etc/Ascend /etc/Ascend
        
        # # ################# Install vLLM && vLLM Ascend ##################################################
        FROM cann AS vllm
        
        ARG VLLM_VERSION 
        ARG VLLM_ASCEND_VERSION
        ARG COMPILE_CUSTOM_KERNELS=1
        
        ENV DEBIAN_FRONTEND=noninteractive
        ENV COMPILE_CUSTOM_KERNELS=${COMPILE_CUSTOM_KERNELS}
        
        RUN git clone https://gitee.com/aisbench/benchmark.git && \
            mv benchmark /tmp/ && \
            cd /tmp/benchmark && \
            pip install ./ && \
            pip install -r requirements/extra.txt && \
            rm -rf /tmp/*
        
        
        RUN git config --global http.sslVerify false  && \
            git clone -b ${VLLM_VERSION} https://github.com/vllm-project/vllm.git && \
            mv vllm /tmp/ && \
            cd /tmp/vllm && \
            pip install -r ./requirements/build.txt && \
            pip install -r ./requirements/common.txt && \
            VLLM_TARGET_DEVICE=empty pip install -v . && \
            rm -rf /tmp/*
        
        RUN apt-get update -y && \
            apt-get install -y net-tools && \
            rm -rf /var/cache/apt/* && \
            rm -rf /var/lib/apt/lists/*
        
        SHELL [ "/bin/bash", "-c" ]
        
        RUN source /usr/local/Ascend/ascend-toolkit/set_env.sh && \
            source /usr/local/Ascend/nnal/atb/set_env.sh && \
            export LD_LIBRARY_PATH=/usr/local/Ascend/ascend-toolkit/latest/`uname -i`-linux/devlib:$LD_LIBRARY_PATH && \
            export ATB_HOME_PATH=/usr/local/Ascend/nnal/atb/latest/atb/cxx_abi_0 && \
            export ASDOPS_HOME_PATH=${ATB_HOME_PATH} && \
            export LD_LIBRARY_PATH=${ATB_HOME_PATH}/lib:${ATB_HOME_PATH}/examples:${ATB_HOME_PATH}/tests/atbopstest:${LD_LIBRARY_PATH} && \
            export PATH=${ATB_HOME_PATH}/bin:$PATH && \
            export ASCEND_TOOLKIT_HOME=/usr/local/Ascend/ascend-toolkit/latest && \
            export LD_LIBRARY_PATH=${ASCEND_TOOLKIT_HOME}/lib64:${ASCEND_TOOLKIT_HOME}/lib64/plugin/opskernel:${ASCEND_TOOLKIT_HOME}/lib64/plugin/nnengine:${ASCEND_TOOLKIT_HOME}/opp/built-in/op_impl/ai_core/tbe/op_tiling:$LD_LIBRARY_PATH && \
            git config --global http.sslVerify false  && \
            git clone https://github.com/vllm-project/vllm-ascend.git && \
            # git clone -b ${VLLM_ASCEND_VERSION} https://github.com/vllm-project/vllm-ascend.git && \
            mv vllm-ascend /tmp/ && \
            cd /tmp/vllm-ascend/ && \
            pip install -v . && \
            rm -rf /tmp/*
        
        # ################################################## Install Torch & Torch_npu & MindieTurbo ##################################################
        FROM vllm AS turbo
        
        COPY ./packages_blue/Ascend-mindie-turbo_2.1.RC2_py311_linux_aarch64.tar.gz /tmp
        RUN cd /tmp && \
            
            tar -xzvf /tmp/Ascend-mindie-turbo_2.1.RC2_py311_linux_aarch64.tar.gz  && \ 
            
            cd /tmp/Ascend-mindie-turbo_2.1.RC2_py311_linux_aarch64 && \
            pip install *.whl && \
            pip cache purge && \
            rm -rf /tmp/*
        
        COPY ./packages_blue/pytorch-v7.0.0-pytorch2.5.1.tar.gz ./packages_blue/torch-2.5.1-cp311-cp311-linux_aarch64.whl /tmp/
        
        RUN cd /tmp && tar -xzvf pytorch-v7.0.0-pytorch2.5.1.tar.gz && \
            cd - && \
            pip install /tmp/torch_npu-*`uname -i`.whl.whl --force-reinstall --no-deps && \
            pip install /tmp/torch-2.5.1-cp311-cp311-linux_aarch64.whl --force-reinstall --no-deps && \
            pip install pandas gevent sacrebleu rouge_score pybind11 pytest && \
            pip cache purge && \
            rm -rf /tmp/*
        
        
        # ################################################## Install Tools ##################################################
        
        FROM turbo AS dev
        
        RUN apt update && apt install -y \
            curl \
            unzip \
            zip \
            && apt clean
        
        # Note: Set environment variables
        RUN \
            CANN_TOOLKIT_ENV_FILE="/usr/local/Ascend/ascend-toolkit/set_env.sh" && \
            CANN_NNAL_ENV_FILE="/usr/local/Ascend/nnal/atb/set_env.sh" && \
            echo "source ${CANN_TOOLKIT_ENV_FILE}" >> /etc/profile && \
            echo "source ${CANN_TOOLKIT_ENV_FILE}" >> ~/.bashrc && \
            echo "source ${CANN_NNAL_ENV_FILE}" >> /etc/profile && \
            echo "source ${CANN_NNAL_ENV_FILE}" >> ~/.bashrc
      2. 编写docker-compose.yml文件。
        services:
          mindie-turbo:
            build:
              context: .
              network: host
              dockerfile: Dockerfile
              target: turbo
              args:
                DEVICE: 910b
                ARCH: aarch64
                
                CANN_VERSION: 8.2.RC2
            image: mindie-turbo:800I-A2-py311-Ubuntu24.04-aarch64
            container_name: mindie-turbo
            volumes:
              - /usr/local/Ascend/driver:/usr/local/Ascend/driver
              - /usr/local/bin/npu-smi:/usr/local/bin/npu-smi
              - /usr/local/dcmi:/usr/local/dcmi
              - /usr/local/sbin:/usr/local/sbin
              - /data:/data
            working_dir: /workspace
            entrypoint: /bin/bash
            tty: true
            privileged: true

        “/home/data”路径只是一个示例,请根据自身需要挂载对应目录。

    4. 在“/home/package”目录下,执行如下命令构建镜像(不启动容器):
      docker compose build
    5. 执行如下命令后台启动容器。
      docker compose up -d
    6. 执行如下命令进入容器。
      docker exec -it <container-name> /bin/bash
  • 构建MindIE Turbo x86架构的镜像文件
    1. 使用wget下载Python 3.11.10源码包,放置于某一目录下,如“/home/package”。
      wget https://www.python.org/ftp/python/3.11.10/Python-3.11.10.tgz
    2. 参见表2,将获取的X86架构MindIE Turbo软件包、CANN软件包、PyTorch软件包(包括torch_npu、torch)放于如上“/home/package”目录。
    3. 在“/home/package”路径下编写Dockerfile和docker-compose.yml,其文件目录结构如下:
      .
      ├── Ascend-cann-kernels-910b_8.2.RC2_linux-x86_64.run
      ├── Ascend-cann-nnal_8.2.RC2_linux-x86_64.run
      ├── Ascend-cann-toolkit_8.2.RC2_linux-x86_64.run
      ├── Ascend-mindie-turbo_2.1.RC2_py311_linux_x86_64.tar.gz
      ├── Dockerfile
      ├── docker-compose.yml
      ├── Python-3.11.10.tgz
      ├── torch-2.5.1-cp311-cp311-linux_aarch64.whl
      ├── pytorch-v7.0.0-pytorch2.5.1.tar.gz
      1. 编写Dockerfile文件
        FROM ubuntu:24.04 AS base
        
        ENV LD_LIBRARY_PATH=/usr/local/Ascend/driver/lib64/driver:/usr/local/Ascend/driver/lib64/common:/usr/local/lib:$LD_LIBRARY_PATH
        ENV LD_LIBRARY_PATH=/usr/local/Ascend/nnal/atb/latest/atb/cxx_abi_0/lib:/usr/local/Ascend/nnal/atb/latest/atb/cxx_abi_0/examples:/usr/local/Ascend/nnal/atb/latest/atb/cxx_abi_0/tests/atbopstest:/usr/local/Ascend/ascend-toolkit/latest/tools/aml/lib64:/usr/local/Ascend/ascend-toolkit/latest/tools/aml/lib64/plugin:/usr/local/Ascend/ascend-toolkit/latest/lib64/plugin/nnengine:/usr/local/Ascend/ascend-toolkit/latest/opp/built-in/op_impl/ai_core/tbe/op_tiling/lib/linux/:/usr/local/Ascend/ascend-toolkit/latest/lib64:/usr/local/Ascend/ascend-toolkit/latest/lib64/plugin/opskernel:/usr/local/Ascend/driver/lib64/driver:/usr/local/Ascend/driver/lib64/common:/usr/local/lib::$LD_LIBRARY_PATH
        ENV DEBIAN_FRONTEND=noninteractive
        ENV TZ=Asia/Shanghai
        ENV TERM=xterm-256color
        
        # Configure the Ubuntu mirror. 
        RUN sed -i "s@http://.*archive.ubuntu.com@http://mirrors.ustc.edu.cn@g" /etc/apt/sources.list.d/ubuntu.sources && \
            sed -i "s@http://.*security.ubuntu.com@http://mirrors.ustc.edu.cn@g" /etc/apt/sources.list.d/ubuntu.sources
        RUN apt-get update && \
            apt-get upgrade -y && \
            apt-mark hold python3
        
        # Runtime Dependencies
        RUN set -eux; \
            apt-get install -y --no-install-recommends \
                apt-transport-https \
                ca-certificates \
                bash \
                curl \
                locales \
                netbase \
                tzdata \
                wget \
                vim \
                git \
                libreadline-dev \
                gcc \
                g++ \
                make \
                cmake \
                libc6 \
                build-essential \
                libssl-dev \
                zlib1g \
                zlib1g-dev \
                libncurses5-dev \
                libbz2-dev \
                libreadline-dev \
                libsqlite3-dev \
                libffi-dev \
                libnss3-dev \
                libgdbm-dev \
                liblzma-dev \
                libev-dev \
                net-tools \
            ; \
            apt-get clean && \
            rm -rf /var/lib/apt/lists/* && \
            rm -rf /rmp/* && \
            rm -rf /var/lib/apt/lists/*
        
        
        
        #Installed python 
        ENV PATH=/usr/local/python3.11.10/bin:$PATH
        ENV LANG C.UTF-8
        COPY ./turbo-image/Python-3.11.10.tgz /tmp/
        RUN tar -xf /tmp/Python-3.11.10.tgz -C /tmp && \
            cd /tmp/Python-3.11.10 && \
            mkdir -p /usr/local/python3.11.10/lib && \
            ./configure --enable-shared  --with-zlib=/usr/include LDFLAGS="-Wl,-rpath /usr/local/python3.11.10/lib" --prefix=/usr/local/python3.11.10 && \
            make -j $(nproc) && \
            make altinstall && \
            ln -sf /usr/local/python3.11.10/bin/python3.11 /usr/local/python3.11.10/bin/python3 && \
            ln -sf /usr/local/python3.11.10/bin/pip3.11 /usr/local/python3.11.10/bin/pip3 && \
            ln -sf /usr/local/python3.11.10/bin/python3 /usr/local/python3.11.10/bin/python && \
            ln -sf /usr/local/python3.11.10/bin/pip3 /usr/local/python3.11.10/bin/pip && \
            rm -rf /tmp/*
        
        #添加pip 镜像源防止 pip install 超时
        RUN mkdir ~/.pip  && \
            echo "[global]" > ~/.pip/pip.conf && \
            echo "index-url = http://mirrors.aliyun.com/pypi/simple/" >> ~/.pip/pip.conf && \
            echo "trusted-host = mirrors.aliyun.com" >> ~/.pip/pip.conf && \
            pip3 install \
            --disable-pip-version-check \
            --no-cache-dir \
            --no-compile \
            'setuptools==65.5.1' \
            wheel 
        
        
        ################################################## CANN INSTALLER ##################################################
        FROM base AS cann_installer
        
        ARG DEVICE
        ARG CANN_VERSION
        ARG ARCH
        
        
        RUN pip install --no-cache-dir --upgrade pip
        RUN pip install --no-cache-dir \
                attrs cython numpy==1.24.0 decorator sympy cffi pyyaml pathlib2 \
                psutil protobuf==3.20 scipy requests absl-py
        
        COPY ./turbo-image/Ascend-cann-toolkit_${CANN_VERSION}_linux-${ARCH}.run ./turbo-image/Ascend-cann-nnal_${CANN_VERSION}_linux-${ARCH}.run ./turbo-image/Ascend-cann-kernels-${DEVICE}_${CANN_VERSION}_linux-${ARCH}.run /tmp/
        RUN chmod +x /tmp/*.run && \
            ./tmp/Ascend-cann-toolkit_*linux-*.run --quiet --install --install-for-all && \
            ./tmp/*-cann-kernels*_linux-*.run --quiet --install --install-for-all && \
            . /usr/local/Ascend/ascend-toolkit/set_env.sh && \
            ./tmp/Ascend-cann-nnal_*_linux-*.run --quiet --install --install-for-all && \
            rm -rf /tmp/*
        
        
        ################################################## Install CANN ##################################################
        FROM base AS cann
        
        # Note: Toolkit Environment variables, obtained from /usr/local/Ascend/ascend-toolkit/set_env.sh
        ENV ASCEND_TOOLKIT_HOME=/usr/local/Ascend/ascend-toolkit/latest
        ENV LD_LIBRARY_PATH=/usr/local/Ascend/driver/lib64/common/:/usr/local/Ascend/driver/lib64/driver/:$LD_LIBRARY_PATH
        ENV LD_LIBRARY_PATH=${ASCEND_TOOLKIT_HOME}/lib64:${ASCEND_TOOLKIT_HOME}/lib64/plugin/opskernel:${ASCEND_TOOLKIT_HOME}/lib64/plugin/nnengine:${ASCEND_TOOLKIT_HOME}/opp/built-in/op_impl/ai_core/tbe/op_tiling:$LD_LIBRARY_PATH
        ENV LD_LIBRARY_PATH=${ASCEND_TOOLKIT_HOME}/tools/aml/lib64:${ASCEND_TOOLKIT_HOME}/tools/aml/lib64/plugin:$LD_LIBRARY_PATH
        ENV PYTHONPATH=${ASCEND_TOOLKIT_HOME}/python/site-packages:${ASCEND_TOOLKIT_HOME}/opp/built-in/op_impl/ai_core/tbe:$PYTHONPATH
        ENV PATH=${ASCEND_TOOLKIT_HOME}/bin:${ASCEND_TOOLKIT_HOME}/compiler/ccec_compiler/bin:${ASCEND_TOOLKIT_HOME}/tools/ccec_compiler/bin:$PATH
        ENV ASCEND_AICPU_PATH=${ASCEND_TOOLKIT_HOME} \
            ASCEND_OPP_PATH=${ASCEND_TOOLKIT_HOME}/opp \
            TOOLCHAIN_HOME=${ASCEND_TOOLKIT_HOME}/toolkit \
            ASCEND_HOME_PATH=${ASCEND_TOOLKIT_HOME}
        
        # Note: NNAL Environment variables, obtained from /usr/local/Ascend/nnal/set_env.sh
        ENV ATB_HOME_PATH=/usr/local/Ascend/nnal/atb/latest/atb/cxx_abi_0
        ENV LD_LIBRARY_PATH=${ATB_HOME_PATH}/lib:${ATB_HOME_PATH}/examples:${ATB_HOME_PATH}/tests/atbopstest:${LD_LIBRARY_PATH}
        ENV PATH=${ATB_HOME_PATH}/bin:$PATH
        ENV ATB_STREAM_SYNC_EVERY_KERNEL_ENABLE=0
        ENV ATB_STREAM_SYNC_EVERY_RUNNER_ENABLE=0
        ENV ATB_STREAM_SYNC_EVERY_OPERATION_ENABLE=0
        ENV ATB_OPSRUNNER_SETUP_CACHE_ENABLE=1
        ENV ATB_OPSRUNNER_KERNEL_CACHE_TYPE=3
        ENV ATB_OPSRUNNER_KERNEL_CACHE_LOCAL_COUNT=1
        ENV ATB_OPSRUNNER_KERNEL_CACHE_GLOABL_COUNT=5
        ENV ATB_OPSRUNNER_KERNEL_CACHE_TILING_SIZE=10240
        ENV ATB_WORKSPACE_MEM_ALLOC_ALG_TYPE=1
        ENV ATB_WORKSPACE_MEM_ALLOC_GLOBAL=0
        ENV ATB_COMPARE_TILING_EVERY_KERNEL=0
        ENV ATB_HOST_TILING_BUFFER_BLOCK_NUM=128
        ENV ATB_DEVICE_TILING_BUFFER_BLOCK_NUM=32
        ENV ATB_SHARE_MEMORY_NAME_SUFFIX=""
        ENV ATB_LAUNCH_KERNEL_WITH_TILING=1
        ENV ATB_MATMUL_SHUFFLE_K_ENABLE=1
        ENV ATB_RUNNER_POOL_SIZE=64
        ENV ASDOPS_HOME_PATH=${ATB_HOME_PATH}
        ENV ASDOPS_MATMUL_PP_FLAG=1
        ENV ASDOPS_LOG_LEVEL=ERROR
        ENV ASDOPS_LOG_TO_STDOUT=0
        ENV ASDOPS_LOG_TO_FILE=1
        ENV ASDOPS_LOG_TO_FILE_FLUSH=0
        ENV ASDOPS_LOG_TO_BOOST_TYPE=atb
        ENV ASDOPS_LOG_PATH=/root
        ENV ASDOPS_TILING_PARSE_CACHE_DISABLE=0
        ENV LCCL_DETERMINISTIC=0
        ENV LCCL_PARALLEL=0 
        
        
        COPY --from=cann_installer /usr/local/Ascend /usr/local/Ascend
        COPY --from=cann_installer /etc/Ascend /etc/Ascend
        
        ################################################## install torch_npu  ########################################################
        FROM cann AS torch 
        ARG DEVICE
        ARG TORCH_VERSION
        ARG ARCH
        COPY ./turbo-image/torch-${TORCH_VERSION}+cpu-cp311-cp311-linux_${ARCH}.whl ./turbo-image/pytorch_v${TORCH_VERSION}_py311.tar.gz /tmp/
        RUN cd /tmp && tar -xzvf pytorch-v7.0.0-pytorch2.5.1.tar.gz && \
            cd - && \
            pip install /tmp/torch-2.5.1+cpu-cp311-cp311-linux_${ARCH}.whl --no-deps && \
            pip install /tmp/torch_npu-*_${ARCH}.whl --no-deps && \
            pip install pandas gevent sacrebleu rouge_score pybind11 pytest&& \ 
            pip cache purge && \
            rm -rf /tmp/*
        
        
        ################################################## Install  vLLM&VLLM_Ascend ##################################################
        FROM torch AS vllm
        
        ARG VLLM_VERSION
        ARG VLLM_ASCEND_VERSION
        ARG COMPILE_CUSTOM_KERNELS=1
        
        ENV COMPILE_CUSTOM_KERNELS=${COMPILE_CUSTOM_KERNELS}
        
        COPY ./turbo-image/benchmark.tar.gz /tmp/
        RUN tar -zxf /tmp/benchmark.tar.gz -C /tmp && \
            cd /tmp/benchmark && \
            pip3 install ./ && \
            pip3 install -r requirements/extra.txt && \
            rm -rf /tmp/*	
        
        COPY ./turbo-image/vllm.tar.gz /tmp/
        RUN tar -zxf /tmp/vllm.tar.gz -C /tmp && \
            cd /tmp/vllm && \
            sed -i '7s/^/#/' ./requirements/build.txt && \
            pip install -r ./requirements/common.txt && \
            pip install -r ./requirements/build.txt && \
            VLLM_TARGET_DEVICE=empty pip install -v . --extra-index https://download.pytorch.org/whl/cpu/ && \
            pip uninstall -y triton && \
            rm -rf /tmp/*
        
        
        SHELL [ "/bin/bash", "-c" ]
        COPY ./turbo-image/vllm-ascend.tar.gz /tmp/
        RUN source /usr/local/Ascend/ascend-toolkit/set_env.sh && \
            source /usr/local/Ascend/nnal/atb/set_env.sh && \
            export LD_LIBRARY_PATH=/usr/local/Ascend/ascend-toolkit/latest/x86_64-linux/devlib:$LD_LIBRARY_PATH && \
            export ATB_HOME_PATH=/usr/local/Ascend/nnal/atb/latest/atb/cxx_abi_0 && \
            export ASDOPS_HOME_PATH=${ATB_HOME_PATH} && \
            export LD_LIBRARY_PATH=${ATB_HOME_PATH}/lib:${ATB_HOME_PATH}/examples:${ATB_HOME_PATH}/tests/atbopstest:${LD_LIBRARY_PATH} && \
            export PATH=${ATB_HOME_PATH}/bin:$PATH && \
            export ASCEND_TOOLKIT_HOME=/usr/local/Ascend/ascend-toolkit/latest && \
            export LD_LIBRARY_PATH=${ASCEND_TOOLKIT_HOME}/lib64:${ASCEND_TOOLKIT_HOME}/lib64/plugin/opskernel:${ASCEND_TOOLKIT_HOME}/lib64/plugin/nnengine:${ASCEND_TOOLKIT_HOME}/opp/built-in/op_impl/ai_core/tbe/op_tiling:$LD_LIBRARY_PATH && \
        	cd /tmp/ && tar -zxf vllm-ascend.tar.gz && cd vllm-ascend && \
            python setup.py install && \
            rm -rf /tmp/*
        
        ################################################## Install Torch_opt & Torch_npu_opt & MindieTurbo ##################################################
        FROM vllm AS turbo
        
        ARG MINDIE_TURBO_VERSION
        ARG TORCH_VERSION
        ARG ARCH
        COPY ./turbo-image/torch-${TORCH_VERSION}+cpu-cp311-cp311-linux_${ARCH}.whl ./turbo-image/pytorch_v${TORCH_VERSION}_py311.tar.gz /tmp/
        RUN cd /tmp && tar -xzvf pytorch-v7.0.0-pytorch2.5.1.tar.gz && \
            cd - && \
            pip install /tmp/torch-2.5.1+cpu-cp311-cp311-linux_${ARCH}.whl --no-deps && \
            pip install /tmp/torch_npu-*_${ARCH}.whl --no-deps && \
            pip install pandas gevent sacrebleu rouge_score pybind11 pytest&& \ 
            pip cache purge && \
            rm -rf /tmp/*
        
        RUN wget -q http://172.17.0.1:3000/Ascend-mindie-turbo_${MINDIE_TURBO_VERSION}_py311_linux_${ARCH}.tar.gz -P /tmp && \
            cd /tmp && \
            tar -xzvf /tmp/Ascend-mindie-turbo_*_py311_linux_${ARCH}.tar.gz  && \  
            cd /tmp/Ascend-mindie-turbo_*_py311_linux_${ARCH} && \
            pip install *.whl && \
            pip cache purge && \
            rm -rf /tmp/*
        	
        # ################################################## Install Tools ##################################################
        
        FROM turbo AS dev
        
        RUN if ["$DEV" = "dev"]; then \
                apt  update && apt install -y \
                unzip \
                zip \
                && apt clean; \
            fi
        # Note: Set environment variables
        RUN CANN_TOOLKIT_ENV_FILE="/usr/local/Ascend/ascend-toolkit/set_env.sh" && \
            CANN_NNAL_ENV_FILE="/usr/local/Ascend/nnal/atb/set_env.sh" && \
            echo "source ${CANN_TOOLKIT_ENV_FILE}" >> /etc/profile && \
            echo "source ${CANN_TOOLKIT_ENV_FILE}" >> ~/.bashrc && \
            echo "source ${CANN_NNAL_ENV_FILE}" >> /etc/profile && \
            echo "source ${CANN_NNAL_ENV_FILE}" >> ~/.bashrc && \
            echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/Ascend/ascend-toolkit/latest/x86_64-linux/devlib" >> /etc/profile && \
            echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/Ascend/ascend-toolkit/latest/x86_64-linux/devlib" >> ~/.bashrc
      2. 编写docker-compose.yml文件。
        services:
          mindie-turbo:
            build:
              context: .
              network: host
              dockerfile: Dockerfile
              target: turbo
              args:
                DEVICE: 910b
                ARCH: x86_64
                
                CANN_VERSION: 8.2.RC2
            image: mindie-turbo:800I-A2-py311-Ubuntu24.04-x86_64
            container_name: mindie-turbo
            volumes:
              - /usr/local/Ascend/driver:/usr/local/Ascend/driver
              - /usr/local/bin/npu-smi:/usr/local/bin/npu-smi
              - /usr/local/dcmi:/usr/local/dcmi
              - /usr/local/sbin:/usr/local/sbin
              - /data:/data
            working_dir: /workspace
            entrypoint: /bin/bash
            tty: true
            privileged: true

        “/home/data”路径只是一个示例,请根据自身需要挂载对应目录。

    4. 在“/home/package”目录下,执行如下命令构建镜像(不启动容器):
      docker compose build
    5. 执行如下命令后台启动容器。
      docker compose up -d
    6. 执行如下命令进入容器。
      docker exec -it <container-name> /bin/bash