# 使用GPU实例基于ChatGLM-6B语言模型搭建AI对话机器人
#### 应用场景
ChatGLM作为面向中文场景优化的大语言模型，可广泛应用于智能客服、业务问答、知识检索、办公助理等企业级对话场景，帮助组织以较低成本构建高质量的智能交互能力，加速业务流程智能化升级。
#### 方案架构
图1基于GPU实例部署ChatGLM-6B对话机器人示意图   
![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002641449930.png "点击放大")
#### 方案优势
依托华为云ECS GPU实例部署ChatGLM，可获得高性能、可控性强的专属算力环境，支持模型本地化部署、数据安全可控、性能稳定可预期，并能按需扩展资源，帮助企业快速构建自主可控的智能对话能力，实现AI服务的高效落地与持续演进。
#### 资源和成本规划
表1资源和成本规划 
| 资源     | 资源说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | 成本说明                                                                                                                                                                                                                                                                                                                                                          |
|:---|:---|:---|
| 安全组    | 入方向规则： - 优先级：1  - 策略：允许  - 类型：IPv4  - 协议端口：TCP: 8000  - 源地址：0.0.0.0/0                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | 免费                                                                                                                                                                                                                                                                                                                                                            |
| 弹性云服务器 | - 计费模式：包年/包月  - 可用区：可用区1  - 规格：pi2.2xlarge.4。更多规格推荐，请参见[表2]  - 镜像：Ubuntu 22.04 server 64bit with NO Driver(40GiB)，GPU驱动为535.161.08，CUDA为12.2.0  - 系统盘：40GiB  - 数据盘：100GiB  - 弹性公网IP：现在购买  - 线路：全动态BGP  - 公网带宽：按流量计费  - 带宽大小：300 Mbit/s   | ECS涉及以下几项费用： - 云服务器  - 云硬盘  - 弹性公网IP   具体的计费方式及标准请参考[计费模式概述](https://support.huaweicloud.com/price-ecs/ecs_billing_2001.html)。 |
   
 表2ChatGLM-6B运行可选的GPU弹性云服务规格 
| 模型名称       | 最小所需规格          | GPU卡         |
|:---|:---|:---|
| ChatGLM-6B | pi2.2xlarge.4   | T4(16G)\*1   |
| ChatGLM-6B | p2s.4xlarge.8   | V100(32G)\*1 |
| ChatGLM-6B | g6.4xlarge.4 | T4(16G)\*1 |
   
![](https://support.huaweicloud.com/bestpractice-ecs/public_sys-resources/note_3.0-zh-cn.png)
请联系华为云技术支持选择最适合您部署的GPU卡资源服务器。
#### 前提条件
- 弹性云服务器所在安全组添加了如[表3]所示的安全组规则，具体步骤参见[为安全组添加安全组规则](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0030878383.html)。
   表3安全组规则 
  | 方向 | 优先级 | 策略 | 类型  | 协议端口      | 源地址        |
  |:---|:---|:---|:---|:---|:---|
  | 入方向 | 1       | 允许   | IPv4 | TCP: 8000 | 0.0.0.0/0 |
     
  
 
#### 基于ChatGLM-6B语言模型搭建AI对话机器人的操作步骤
Linux实例基于ChatGLM-6B语言模型搭建AI对话机器人的主要操作步骤如下：
1. [创建GPU弹性云服务器。]
2. [驱动和CUDA的前置条件检查。]
3. [初始化数据盘，用于存放模型文件及相关资源。]
4. [创建conda虚环境。]
5. [下载ChatGLM-6B模型。]
6. [下载ChatGLM示例demo。]
7. [以cli模式启动AI对话机器人。]
8. [以web模式启动AI对话机器人。]
 
#### 实施步骤
1. 创建GPU弹性云服务器。
   
   本操作以安装了Ubuntu操作系统的pi2.2xlarge.4实例为例。实例配置请注意如下参数，其他参数说明，请参见[自定义购买ECS](https://support.huaweicloud.com/usermanual-ecs/ecs_03_7002.html)。
   1. 实例：pi2.2xlarge.4。更多规格推荐，请参见[表2]。
   
   2. 镜像：Ubuntu 22.04 server 64bit with NO Driver(40GiB)，勾选"自动安装GPU驱动"，GPU驱动为535.161.08，CUDA为12.2.0。
      ![](https://support.huaweicloud.com/bestpractice-ecs/public_sys-resources/note_3.0-zh-cn.png)
      建议选择Huawei Cloud EulerOS 2.0或Ubuntu 22.04中未安装驱动的公共镜像，自动安装GPU驱动。建议驱动版本：Driver-535.161.08，CUDA-12.2.0。
      图2GPU实例镜像选择和自动安装GPU驱动选择   
      ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002560648195.png "点击放大") 
   
   3. 弹性公网IP：选择"现在购买"，方便下载依赖环境下载和调用模型接口进行推理。
   
   4. 安全组：入方向放通TCP: 8000端口，用于访问WebUI服务。具体步骤参见[为安全组添加安全组规则](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0030878383.html)。
   
   5. 存储与备份：为保证服务稳定运行与数据安全，建议采用系统盘与数据盘分离部署的架构。
      - 系统盘：40GiB，用于安装操作系统、驱动及运行环境。
      
      - 数据盘：100GiB，用于独立存储模型文件、生成图片及相关业务数据等。
       
   
   
   
   
2. 驱动和CUDA的前置条件检查。
   
   执行以下命令，查看显卡基本信息。
   ```
   nvidia-smi
   ```
   如果使用的不是推荐的镜像和驱动版本，请参考[手动安装GPU加速型ECS的Tesla驱动](https://support.huaweicloud.com/usermanual-ecs/ecs_03_0174.html)方法更新驱动到535版本，CUDA更新到12.2。
   
   
3. 初始化数据盘，用于存放模型文件及相关资源。
   
   GPU弹性云服务器创建完成后，请参见[初始化Linux数据盘](https://support.huaweicloud.com/usermanual-evs/evs_01_0033.html)进行数据盘初始化。本实践将数据盘挂载至**/mnt/model**目录，您可以根据业务需要自行定义目录。
   ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002560768225.png "点击放大")
   
   
4. 创建conda虚环境。
   
   1. 执行以下命令，下载[miniconda安装包](https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh)。
      ```
      wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
      ```
      
   
   2. 执行以下命令，并按照回显提示信息进行操作，安装miniconda。
      ```
      bash Miniconda3-latest-Linux-x86_64.sh
      ```
      
   
   3. 执行以下命令，将conda环境变量添加到启动文件中。
      ```
      echo 'export PATH="$HOME/miniconda3/bin:$PATH"' >> ~/.bashrc
      source ~/.bashrc
      ```
      
   
   4. 执行以下命令，并按照回显提示信息进行操作，创建基于python3.10的虚环境。
      ```
      conda create -n chatglm python=3.10
      conda activate chatglm
      ```
      
   
   
   
   
5. 下载ChatGLM-6B模型。
   
   1. 执行以下命令，创建下载模型脚本。
      ```
      vim download_models.py
      ```
      按"i"键进入编辑模式，插入以下内容：
      ```
      from modelscope import snapshot_download
      model_dir = snapshot_download('ZhipuAI/ChatGLM-6B', cache_dir='/mnt/model', revision='master')
      ```
      模型名称为ZhipuAI/ChatGLM-6B，本实践中模型的存储路径为*/mnt/model*，可以根据业务需要更换目录。
      添加完成后，按"Esc"键退出编辑模式，并输入":wq"后按"Enter"键，保存并退出文件。
      
   
   2. 执行以下命令，下载ChatGLM模型。
      ```
      pip install modelscope
      python download_models.py
      ```
      等待模型下载完成。回显中显示"Download model 'ZhipuAI/ChatGLM-6B' successfully."，则表示模型下载完成。
      
   
   
   ![](https://support.huaweicloud.com/bestpractice-ecs/public_sys-resources/note_3.0-zh-cn.png)
   ModelScope是国内的开源模型社区，在中国地区访问速度更快；若在海外环境使用，建议通过Hugging Face获取相应模型。
   
   
6. 下载ChatGLM示例demo。
   
   1. 执行以下命令，下载[ChatGLM demo文件](https://github.com/zai-org/ChatGLM-6B.git)。
      ```
      git clone https://github.com/zai-org/ChatGLM-6B.git
      ```
      
   
   2. 安装demo所需依赖。
      ```
      cd ChatGLM-6B/
      sed -i '/torch/d' requirements.txt
      pip install torch==2.1.2+cu121 torchvision==0.16.2+cu121 --index-url https://download.pytorch.org/whl/cu121
      pip install -r requirements.txt
      ```
      等待所需依赖下载完成。
      
   
   
   
   
7. 以CLI模式启动AI对话机器人。
   
   执行以下命令，以cli模式启动AI对话机器人。
   ```
   sed -i 's|"THUDM/chatglm-6b"|"/mnt/model/ZhipuAI/ChatGLM-6B"|g' cli_demo.py
   python cli_demo.py
   ```
   ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002529808246.png "点击放大")
   ![](https://support.huaweicloud.com/bestpractice-ecs/public_sys-resources/note_3.0-zh-cn.png)
   sed命令需要将从Hugging Face拉取的模型替换为本地的模型，本地模型的路径请以[下载ChatGLM-6B模型]中的配置为准。
   
   
8. 以web模式启动AI对话机器人。
   
   1. 执行以下命令，以web模式启动AI对话机器人。
      ```
      pip install streamlit
      pip install streamlit_chat
      export STREAMLIT_SERVER_HEADLESS=1
      sed -i 's|"THUDM/chatglm-6b"|"/mnt/model/ZhipuAI/ChatGLM-6B"|g' web_demo2.py
      streamlit run web_demo2.py --server.port 8000
      ```
      ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002529848260.png "点击放大")
      
   
   2. 使用本地浏览器访问***http://\<弹性公网IP\>:8000*** 打开网页与AI进行聊天对话。
      ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002560648197.png "点击放大")
      
   
   
   至此模型就部署完毕并验证正常。您可以通过ECS的CLI或者通过访问***http://\<弹性公网IP\>:8000*** 打开网页来与机器人进行对话。
   
   
 
