本文介绍如何使用阿里云第八代Intel实例,基于IPEX-LLM单机部署千问Qwen-72B-Chat语言模型进行AI对话。
背景信息
创建ECS实例
前往实例创建页。
-
按照界面提示完成参数配置,创建一台ECS实例。
需要注意的参数如下,其他参数的配置,请参见自定义购买实例。
-
实例:Qwen-72B-Chat大概需要70 GiB内存,为了保证模型运行的稳定,建议选择192 GiB内存或以上的实例规格,本文以ecs.c8i.24xlarge为例。
-
镜像:Alibaba Cloud Linux 3.2104 LTS 64位。
-
公网IP:选中分配公网IPv4地址,带宽计费模式选择按使用流量,带宽峰值设置为100 Mbps。以加快模型下载速度。
-
数据盘:Qwen-72B-Chat的运行需要下载多个模型文件,会占用大量存储空间,为了保证模型顺利运行,建议数据盘设置为300 GiB。
-
-
添加安全组规则。
在ECS实例安全组的入方向添加安全组规则并放行22、443、7860端口(用于访问WebUI服务)。具体操作,请参见添加安全组规则。
-
创建完成后,在ECS实例页面,获取公网IP地址。
说明公网IP地址用于进行AI对话时访问WebUI服务。
部署Qwen-72B-Chat
步骤一:配置运行环境
-
远程连接ECS实例。
具体操作,请参见使用Workbench登录Linux实例。
-
安装Docker。
具体操作,请参见安装并使用Docker和Docker Compose。
-
执行以下命令,从
docker hub中下载ipex-llm-serving-cpu镜像。说明ipex-llm-serving-cpu镜像中已包含运行千问所需的环境,启动容器后可直接使用。
sudo docker pull intelanalytics/ipex-llm-serving-cpu:2.2.0-SNAPSHOT[ecs-user@iZj6ceilixxx ~]$ sudo docker pull intelanalytics/ipex-llm-serving-cpu:2.2.0-SNAPSHOT 2.2.0-SNAPSHOT: Pulling from intelanalytics/ipex-llm-serving-cpu 01007420e9b0: Pull complete 63341d78856e: Pull complete 5d0bb6adc43b: Pull complete d0b97f902bf5: Pull complete 2d2f853f4f57: Pull complete 17d02779f97f: Pull complete ca2aaaf805cb: Pull complete c5b81183631f: Pull complete febd299d716b: Pull complete ce599ea20f5a: Pull complete Digest: sha256:a71da0380feef4bb33426e9eb9c174c29be5a45b3fbd9xxx Status: Downloaded newer image for intelanalytics/ipex-llm-serving-cpu:2.2.0-SNAPSHOT docker.io/intelanalytics/ipex-llm-serving-cpu:2.2.0-SNAPSHOT -
执行以下命令,查看并验证
ipex-llm-serving-cpu镜像是否下载成功。sudo docker images若在系统返回信息中,存在如下镜像,则表示
ipex-llm-serving-cpu镜像下载成功。[ecs-user@iZj6ceiliafk ~]$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE intelanalytics/ipex-llm-serving-cpu 2.2.0-SNAPSHOT bf6e756bda6e 17 hours ago 7.67GB
步骤二:下载Qwen-72B-Chat预训练模型
-
执行以下命令,安装
tmux命令。sudo yum install tmux -y -
执行以下命令,创建一个
tmux session窗口。tmux重要下载预训练模型耗时较长,且成功率受网络情况影响较大,建议在
tmux session中下载,以免ECS断开连接导致下载模型中断。 -
执行以下任意命令,下载Qwen-72B-Chat预训练模型。
重要-
使用Git方式下载会产生较大的中间文件,为了节约数据盘空间,建议您使用Python脚本下载。
-
通过公网下载Qwen-72B-Chat预训练模型,因模型数据较大,使用100 Mbps带宽下载时间大约为3小时,请耐心等待。
使用Python脚本下载
-
执行以下命令,下载
miniconda安装包。wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -
执行以下命令,安装
miniconda。bash Miniconda3-latest-Linux-x86_64.sh -
执行以下命令,激活
miniconda。source ~/.bashrc若命令行首部出现
(base)标识,则表示miniconda激活成功。 -
执行以下命令,安装
pip命令。sudo yum install -y python3-pip依次执行以下命令,升级
pip工具、setuptools和wheel库。sudo pip3 install --upgrade pip sudo pip3 install --upgrade setuptools wheel -
miniconda安装成功后,在conda环境中安装modelscope。pip3 install modelscope -
执行Python脚本,下载Qwen-72B-Chat预训练模型。
-
执行以下命令,创建Python脚本文件
test.py。sudo vim test.py -
按i键进入编辑模式,添加以下内容。
from modelscope import snapshot_download model_dir = snapshot_download('qwen/Qwen-72B-Chat') print(model_dir) -
按
Esc键退出编辑模式,然后输入:wq保存并退出。 -
执行以下命令,运行Python脚本文件
test.py。python3 test.py
-
使用Git下载
-
执行以下命令,安装
Git命令。sudo yum install git -y -
下载并安装Git LFS,以确保通过
Git命令可下载大型文件。curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.rpm.sh | sudo bash sudo yum install -y git-lfs -
执行以下命令,验证Git LFS是否安装成功。
git lfs version若系统返回Git LFS的版本信息,则表示成功安装。
-
执行以下命令,下载Qwen-72B-Chat预训练模型。
sudo git clone https://www.modelscope.cn/qwen/Qwen-72B-Chat.git Qwen-72b-chat
-
-
执行以下命令,查看Qwen-72B-Chat预训练模型所在目录路径。
ls -ldrwxr-xr-x 4 root root 4096 Dec 11 11:42 Qwen-72B-Chat
步骤三:启动并进入IPEX-LLM Docker容器
-
编写Docker容器启动脚本文件。
-
执行以下命令,新建并编辑
start-container.sh脚本文件。sudo vim start-container.sh -
按
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/ipex-llm-serving-cpu:2.2.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内存节点编号。 -
-
按
Esc键退出编辑模式,然后输入:wq保存并退出。
-
-
执行以下命令,启动Docker容器。
sudo bash start-container.sh -
执行以下命令,查看Docker容器启动情况。
sudo docker ps -a若系统返回以下信息,则表示Docker容器启动成功。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2525d2da34f5 intelanalytics/bigdl-llm-serving-cpu:2.5.0-SNAPSHOT "/opt/entrypoint.sh" 10 minutes ago Up 10 minutes qwen-llm -
执行以下命令,进入Docker容器。
sudo docker exec -it qwen-llm bash
步骤四:基于IPEX-LLM与Qwen-72B-Chat进行AI对话
-
依次执行以下命令,完成优化操作。
说明在进行AI对话前,您需要对部分环境变量进行设置以在Intel CPU上实现优化效果,并对线程进行优化。
source ipex-llm-init -t export OMP_NUM_THREADS=[使用的cpu核心数] #本示例使用cpu核心数为48,请根据实际情况,将[使用的cpu核心数]替换为合适的cpu核心数。 -
与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格式。root@host:/llm/portable-zip# python chat.py --model-path /models/Qwen-72B-Chat Loading checkpoint shards: 100%|xxx| 19/19 [00:00<00:00, 30.52it/s] 2024-01-25 05:57:22,231 - INFO - Converting the current model to sym_int4 format StartRecentKVCache: 4, 512 H: 为什么太阳总是在东边升起? BigDL-LLM: 这是因为地球自转的方向是从西向东,所以太阳看起来像是从东方升起,从西。此外,地球的自转轴相对于太阳是倾斜的,因此太阳升起和落下的位置也会随着季节的变化。在浏览器进行AI对话
-
执行如下命令,开启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格式,无需进行手动转换。执行命令后,终端显示启动日志。当出现
Running on local URL: http://0.0.0.0:7860时,表示 WebUI 服务已成功启动,可通过该地址访问。2024-01-25 06:03:40 | INFO | gradio_web_server | args: Namespace(host='0.0.0.0', port=None, sha re=False, controller_url='http://localhost:21001', concurrency_count=10, model_list_mode='once' , moderate=False, add_chatgpt=False, add_claude=False, add_palm=False, register_openai_compatib le_models=None, gradio_auth_path=None) 2024-01-25 06:03:40 | INFO | controller | Register a new worker: http://localhost:21002 2024-01-25 06:03:40 | INFO | stdout | INFO: ::1:42722 - "POST /worker_get_status HTTP/1.1" 200 OK 2024-01-25 06:03:40 | INFO | controller | Register done: http://localhost:21002, {'model_names' : ['Qwen-72B-Chat'], 'speed': 1, 'queue_length': 0} 2024-01-25 06:03:40 | INFO | stdout | INFO: ::1:52818 - "POST /refresh_all_workers HTTP/1.1 " 200 OK 2024-01-25 06:03:40 | INFO | stdout | INFO: ::1:52828 - "POST /list_models HTTP/1.1" 200 OK 2024-01-25 06:03:40 | INFO | gradio_web_server | Models: ['Qwen-72B-Chat'] 2024-01-25 06:03:40 | INFO | stdout | Running on local URL: http://0.0.0.0:7860 2024-01-25 06:03:40 | INFO | stdout | 2024-01-25 06:03:40 | INFO | stdout | To create a public link, set `share=True` in `launch()`. -
在浏览器地址栏输入
http://<ECS公网IP地址>:7860,进入Web页面。 -
在页面对话框中,输入对话内容,即可开始AI对话。
界面顶部显示当前模型为 Qwen-72B-Chat,在底部输入框中输入问题并单击 Send,模型即在对话区域生成回答。
-