使用第八代Intel实例单机部署Qwen-72B-Chat

本文介绍如何使用阿里云第八代Intel实例,基于BigDL-LLM单机部署通义千问Qwen-72B-Chat语言模型进行AI对话。

背景信息

什么是Qwen-72B-Chat

通义千问-72B(Qwen-72B)是阿里云研发的通义千问大模型系列的720亿参数规模模型。Qwen-72B的预训练数据类型多样、覆盖广泛,包括大量网络文本、专业书籍、代码等。而Qwen-72B-Chat是在Qwen-72B的基础上,使用对齐机制打造的基于大语言模型的AI助手,是通义千问对外开源的72B规模参数量的经过人类指令对齐的Chat模型。

什么是BigDL-LLM

BigDL-LLM是一个专为大型语言模型优化设计的加速库,它提供了多种低精度优化选项(例如 INT4、INT5、INT8等),并可利用Intel® CPU集成的多种硬件加速技术(例如AVX、VNNI、AMX等)以及最新的软件优化,从而赋能大语言模型在Intel® 平台上实现更高效的优化和更快速的运行。

重要

Qwen-72B-Chat模型依照LICENSE开源,免费商用需填写商业授权申请。您应自觉遵守第三方模型的用户协议、使用规范和相关法律法规,并就使用第三方模型的合法性、合规性自行承担相关责任。

创建ECS实例

  1. 前往实例创建页

  2. 按照界面提示完成参数配置,创建一台ECS实例。

    需要注意的参数如下,其他参数的配置,请参见自定义购买实例

    • 实例Qwen-72B-Chat大概需要70 GiB内存,为了保证模型运行的稳定,建议选择192 GiB内存或以上的实例规格,本文以ecs.c8i.24xlarge为例。

    • 镜像:Alibaba Cloud Linux 3.2104 LTS 64位。

    • 公网IP:选中分配公网IPv4地址,带宽计费模式选择按使用流量,带宽峰值设置为100 Mbps。以加快模型下载速度。

      image..png

    • 数据盘Qwen-72B-Chat的运行需要下载多个模型文件,会占用大量存储空间,为了保证模型顺利运行,建议数据盘设置为300 GiB。

  3. 添加安全组规则。

    在ECS实例安全组的入方向添加安全组规则并放行22、443、7860端口(用于访问WebUI服务)。具体操作,请参见添加安全组规则

  4. 创建完成后,在ECS实例页面,获取公网IP地址。

    说明

    公网IP地址用于进行AI对话时访问WebUI服务。

    image

部署Qwen-72B-Chat

步骤一:配置运行环境

  1. 远程连接ECS实例。

    具体操作,请参见通过密码或密钥认证登录Linux实例

  2. 安装Docker。

    具体操作,请参见安装Docker并使用(Linux)

  3. 执行以下命令,从docker hub中下载bigdl-llm-serving-cpu镜像。

    说明

    bigdl-llm-serving-cpu镜像中已包含运行通义千问所需的环境,启动容器后可直接使用。

    sudo docker pull intelanalytics/bigdl-llm-serving-cpu:2.5.0-SNAPSHOT
  4. 执行以下命令,查看并验证bigdl-llm-serving-cpu镜像是否下载成功。

    sudo docker images

    若在系统返回信息中,存在如下镜像,则表示bigdl-llm-serving-cpu镜像下载成功。

    image

步骤二:下载Qwen-72B-Chat预训练模型

  1. 执行以下命令,安装tmux命令。

    sudo yum install tmux -y
  2. 执行以下命令,创建一个tmux session窗口。

    tmux
    说明

    下载预训练模型耗时较长,且成功率受网络情况影响较大,建议在tmux session中下载,以免ECS断开连接导致下载模型中断。

  3. 执行以下任一命令,下载Qwen-72B-Chat预训练模型。

    说明
    • 使用Git方式下载会产生较大的中间文件,为了节约数据盘空间,建议您使用Python脚本下载。

    • 通过公网下载Qwen-72B-Chat预训练模型,因模型数据较大,使用100 Mbps带宽下载时间大约为3小时,请耐心等待。

    使用Python脚本下载

    1. 执行以下命令,下载miniconda安装包。

      wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
    2. 执行以下命令,安装miniconda

      bash Miniconda3-latest-Linux-x86_64.sh
    3. 执行以下命令,激活miniconda

      source ~/.bashrc

      若命令行首部出现(base)标识,则表示miniconda激活成功。

      image

    4. 执行以下命令,安装pip命令。

      sudo yum install -y python3-pip

      依次执行以下命令,升级pip工具、setuptoolswheel库。

      sudo pip3 install --upgrade pip
      sudo pip3 install --upgrade setuptools wheel
    5. miniconda安装成功后,在conda环境中安装modelscope

      pip3 install modelscope
    6. 执行Python脚本,下载Qwen-72B-Chat预训练模型。

      1. 执行以下命令,创建Python脚本文件test.py

        sudo vim test.py
      2. 按i键进入编辑模式,添加以下内容。

        from modelscope import snapshot_download
        model_dir = snapshot_download('qwen/Qwen-72B-Chat')
        print(model_dir)
      3. Esc键退出编辑模式,然后输入:wq保存并退出。

      4. 执行以下命令,运行Python脚本文件test.py

        python3 test.py

    使用Git下载

    1. 执行以下命令,安装Git命令。

      sudo yum install git -y
    2. 下载并安装Git LFS,以确保通过Git命令可下载大型文件。

      curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.rpm.sh | sudo bash
      sudo yum install -y git-lfs
    3. 执行以下命令,验证Git LFS是否安装成功。

      git lfs version

      若系统返回Git LFS的版本信息,则表示成功安装。

    4. 执行以下命令,下载Qwen-72B-Chat预训练模型。

      sudo git clone https://www.modelscope.cn/qwen/Qwen-72B-Chat.git Qwen-72b-chat
  4. 执行以下命令,查看Qwen-72B-Chat预训练模型所在目录路径。

    ls -l

    image

步骤三:启动并进入BigDL-LLM Docker容器

  1. 编写Docker容器启动脚本文件。

    1. 执行以下命令,新建并编辑start-container.sh脚本文件。

      sudo vim start-container.sh
    2. i键进入编辑模式,添加以下信息。

      export MODEL_PATH=[YOUR_MODEL_PATH]
      
      sudo docker run -itd \
              --net=host \
              --privileged \
              --cpuset-cpus="0-47" \
              --cpuset-mems="0" \
      	  --name="qwen-llm" \
              --shm-size="16g" \
              -v $MODEL_PATH:/models \
              -e ENABLE_PERF_OUTPUT="true" \
              intelanalytics/bigdl-llm-serving-cpu:2.5.0-SNAPSHOT
      说明

      参数说明如下:

      • MODEL_PATH:请您根据实际情况,将[YOUR_MODEL_PATH]替换为上述步骤二中3.查询到Qwen-72B-Chat预训练模型的绝对路径。

      • $MODEL_PATH:启动Docker容器时会将Host的模型挂载到容器的/models目录下。

      • cpuset-cpus:指定使用的CPU核心。

      • cpuset-mems:指定使用的NUMA内存节点编号。

      您可以使用 lscpu 命令来查询CPU核心数量和NUMA内存节点编号。

    3. Esc键退出编辑模式,然后输入:wq保存并退出。

  2. 执行以下命令,启动Docker容器。

    sudo bash start-container.sh
  3. 执行以下命令,查看Docker容器启动情况。

    sudo docker ps -a

    若系统返回以下信息,则表示Docker容器启动成功。

    image

  4. 执行以下命令,进入Docker容器。

    sudo docker exec -it qwen-llm bash

步骤四:基于BigDL-LLM与Qwen-72B-Chat进行AI对话

  1. 依次执行以下命令,完成优化操作。

    说明

    在进行AI对话前,您需要对部分环境变量进行设置以在Intel CPU上实现优化效果,并对线程进行优化。

    source bigdl-llm-init -t
    export OMP_NUM_THREADS=[使用的cpu核心数]   #本示例使用cpu核心数为48,请根据实际情况,将[使用的cpu核心数]替换为合适的cpu核心数。
  2. 与Qwen-72B-Chat进行AI对话。

    在实例内部进行AI对话

    依次执行以下命令,进入终端与Qwen-72B-Chat进行AI对话。

    cd /llm/portable-zip
    python3 chat.py --model-path /models/Qwen-72B-Chat
    说明

    Qwen-72B-Chat预训练模型会在加载时自动转换为int4格式。

    image

    在浏览器进行AI对话

    1. 执行如下命令,开启WebUI服务。

      python3 -m fastchat.serve.controller &
      python3 -m bigdl.llm.serving.model_worker --model-path /models/Qwen-72B-Chat --device cpu &
      python3 -m fastchat.serve.gradio_web_server 
      说明

      在加载model worker时,系统会自动将模型量化为int4格式,无需进行手动转换。

      image

    2. 在浏览器地址栏输入http://<ECS公网IP地址>:7860,进入Web页面。

    3. 在页面对话框中,输入对话内容,即可开始AI对话。

      image