本文以搭建AI對話機器人為例,介紹如何使用基于英特爾CPU的c8i實例,基于xFasterTransformer框架單機部署ChatGLM2-6B語言模型。
背景信息
ChatGLM2-6B中英對話大模型
ChatGLM2-6B是開源中英雙語對話模型ChatGLM-6B的第二代版本,在保留了初代模型對話流暢、部署門檻較低等眾多優秀特性的基礎上,ChatGLM2-6B具有更強大的性能、更長的上下文、更高效的推理等特性。
阿里云第八代Intel CPU實例
阿里云八代實例(g8i/c8i/r8i/hfc8i/hfg8i/hfr8i)采用Intel? Xeon? Emerald Rapids或者Intel? Xeon? Sapphire Rapids,該實例支持使用新的AMX(Advanced Matrix Extensions)指令來加速AI任務。相比于上一代實例,八代實例在Intel? AMX的加持下,推理和訓練性能大幅提升。
xFasterTransformer
xFasterTransformer是由Intel官方開源的推理框架,為大語言模型(LLM)在CPU X86平臺上的部署提供了一種深度優化的解決方案,支持多CPU節點之間的分布式部署方案,使得超大模型在CPU上的部署成為可能。此外,xFasterTransformer提供了C++和Python兩種API接口,涵蓋了從上層到底層的接口調用,易于用戶使用并將xFasterTransformer集成到自有業務框架中。xFasterTransformer目前支持的模型如下:
Models | Framework | Distribution | |
Pytorch | C++ | ||
ChatGLM | √ | √ | √ |
ChatGLM2 | √ | √ | √ |
ChatGLM3 | √ | √ | √ |
Llama | √ | √ | √ |
Llama2 | √ | √ | √ |
Baichuan | √ | √ | √ |
QWen | √ | √ | √ |
SecLLM(YaRN-Llama) | √ | √ | √ |
Opt | √ | √ | √ |
xFasterTransformer支持多種低精度數據類型來加速模型部署。除單一精度以外,還支持混合精度,以更充分地利用CPU的計算資源和帶寬資源,從而提高大語言模型的推理速度。以下是xFasterTransformer支持的單一精度和混合精度類型:
FP16
BF16
INT8
W8A8
INT4
NF4
BF16_FP16
BF16_INT8
BF16_W8A8
BF16_INT4
BF16_NF4
W8A8_INT8
W8A8_int4
W8A8_NF4
阿里云不對第三方模型“ChatGLM2-6B”的合法性、安全性、準確性進行任何保證,阿里云不對由此引發的任何損害承擔責任。
ChatGLM2-6B的代碼依照Apache-2.0協議開源,ChatGLM2-6B模型權重的使用遵循Model License。您應自覺遵守第三方模型的用戶協議、使用規范和相關法律法規,并就使用第三方模型的合法性、合規性自行承擔相關責任。
ChatGLM2-6B模型權重對學術研究完全開放,免費商用請需填寫商業授權申請。本文所示的模型下載僅作為演示,阿里云不對由此引發的任何損害承擔責任。
創建ECS實例
前往實例創建頁。
按照界面提示完成參數配置,創建一臺ECS實例。
需要注意的參數如下,其他參數的配置,請參見自定義購買實例。
實例:ChatGLM2-6B大概需要16 GiB內存,為了保證模型運行的穩定,實例規格至少需要選擇ecs.c8i.4xlarge(32 GiB內存)。
鏡像:Alibaba Cloud Linux 3.2104 LTS 64位。
公網IP:選中分配公網IPv4地址,帶寬計費模式選擇按使用流量,帶寬峰值設置為100 Mbps。以加快模型下載速度。
系統盤:ChatGLM2-6B模型數據下載、轉換和運行過程中需要占用38 GiB的存儲空間,為了保證模型順利運行,建議系統盤設置為100 GiB。
添加安全組規則。
在ECS實例安全組的入方向添加安全組規則并放行22端口和7860端口(22端口用于訪問SSH服務,7860端口用于訪問WebUI頁面)。具體操作,請參見添加安全組規則。
安裝模型所需容器環境
遠程連接該ECS實例。
具體操作,請參見通過密碼或密鑰認證登錄Linux實例。
安裝并啟動Docker。
具體操作,請參見在Alibaba Cloud Linux 3實例中安裝Docker。
獲取并運行Intel xFasterTransformer容器。
sudo docker pull intel/xfastertransformer:1.3.1 sudo docker run -it --name xFT -h xFT --privileged --shm-size=16g --network host -v /mnt:/mnt -w /mnt/xFasterTransformer intel/xfastertransformer:1.3.1
當出現類似如下信息時,表示已獲取并成功運行xFasterTransformer容器。
重要后續操作都需要在容器中運行,如果退出了容器,可以通過以下命令啟動并再次進入容器的Shell環境。
sudo docker start xFT sudo docker exec -it xFT bash
(可選)更新xFasterTransformer腳本代碼。
xFasterTransformer鏡像中已包含對應版本的腳本代碼,可以更新升級到最新的測試腳本。
apt update apt install -y git cd /root/xFasterTransformer git pull
準備模型數據
在容器中安裝依賴軟件。
apt update apt install -y wget git git-lfs vim tmux
啟用Git LFS。
下載預訓練模型需要Git LFS的支持。
git lfs install
創建并進入模型數據目錄。
mkdir /mnt/data cd /mnt/data
創建一個tmux session。
tmux
重要下載預訓練模型耗時較長,且成功率受網絡情況影響較大,建議在tmux session中下載,以避免ECS斷開連接導致下載模型中斷。
下載ChatGLM2-6B預訓練模型。
git clone --depth 1 https://www.modelscope.cn/ZhipuAI/chatglm2-6b.git /mnt/data/chatglm2-6b
轉換模型數據。
由于下載的模型數據是HuggingFace格式,需要轉換成xFasterTransformer格式。生成的模型文件夾為
/mnt/data/chatglm2-6b-xft
。python -c 'import xfastertransformer as xft; xft.ChatGLM2Convert().convert("/mnt/data/chatglm2-6b")'
說明不同的模型數據使用的Convert類不同,xFasterTransformer支持以下模型轉換類:
LlamaConvert
ChatGLMConvert
ChatGLM2Convert
ChatGLM3Convert
OPTConvert
BaichuanConvert
QwenConvert
運行模型進行AI對話
在Web頁面中進行對話
在容器中,分別執行以下命令,安裝WebUI相關依賴軟件。
cd /root/xFasterTransformer/examples/web_demo pip install -r requirements.txt
執行以下命令,啟動WebUI。
OMP_NUM_THREADS=$(($(lscpu | grep "^CPU(s):" | awk '{print $NF}') / 2)) LD_PRELOAD=libiomp5.so GRADIO_SERVER_NAME="0.0.0.0" numactl -C $(seq -s, 0 2 $(($(lscpu | grep "^CPU(s):" | awk '{print $NF}') - 2))) -m 0 python ChatGLM2.py -t /mnt/data/chatglm2-6b -m /mnt/data/chatglm2-6b-xft -d bf16
當出現如下信息時,表示WebUI服務啟動成功。
在瀏覽器地址欄輸入
http://<ECS公網IP地址>:7860
,進入Web頁面。在頁面對話框中,輸入對話內容,然后單擊Submit,即可進行AI對話。
在實例終端進行對話
執行以下命令,啟動AI對話程序。
cd /root/xFasterTransformer/examples/pytorch
OMP_NUM_THREADS=$(($(lscpu | grep "^CPU(s):" | awk '{print $NF}') / 2)) LD_PRELOAD=libiomp5.so numactl -C $(seq -s, 0 2 $(($(lscpu | grep "^CPU(s):" | awk '{print $NF}') - 2))) -m 0 python demo.py -t /mnt/data/chatglm2-6b -m /mnt/data/chatglm2-6b-xft -d bf16 --chat true
Benchmark模型性能
運行benchmark腳本時默認使用的是假模型數據,因此不需要準備模型數據。您執行以下指令來測試模型性能。
cd /root/xFasterTransformer/benchmark
XFT_CLOUD_ENV=1 bash run_benchmark.sh -m chatglm2-6b -d bf16 -bs 1 -in 32 -out 32 -i 10
通過調整運行參數,來測試指定場景下的性能數據:
-d 或 --dtype選擇模型量化類型:
bf16 (default)
bf16_fp16
int8
bf16_int8
fp16
bf16_int4
int4
bf16_nf4
nf4
bf16_w8a8
w8a8
w8a8_int8
w8a8_int4
w8a8_nf4
-bs或--batch_size選擇batch size大小,默認為1。
-in或--input_tokens選擇輸入長度,自定義長度請在prompt.json中配置對應的prompt,默認為32。
-out或--output_tokens選擇生成長度,默認為32。
-i或--iter選擇迭代次數,迭代次數越大,等待測試結果的時間越長,默認為10次。
運行結果展示如下: