火山引擎部署ChatGLM-6B实战指导

人工智能与算法技术大讲堂GPU

前言:

ChatGLM-6B是清华大学知识工程和数据挖掘小组(Knowledge Engineering Group (KEG) & Data Mining at Tsinghua University)发布的一个开源的对话机器人,由清华技术成果转化的公司智谱 AI 开源,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。 picture.image

本文档在火山引擎上使用一台两卡A10或A30的 GPU云服务器,利用Conda创建虚拟环境部署ChatGLM-6B模型,并进行模型推理和精调训练的Demo实践。

准备工作:

创建GPU云服务器

  1. 进入ECS云服务器控制台界面,点击创建实例 picture.image

  2. 在实例类型中,选择GPU计算型,可以看到有A30、A10、V100等GPU显卡的ECS云主机,操作系统镜像选择Ubuntu 带GPU驱动的镜像,火山引擎默认提供的GPU驱动版本为CUDA11.3,如果需要升级版本的话可以参考后面的步骤,配置GPU服务器。

picture.image

配置网际快车加速下载服务(可选)

网际快车是火山引擎提供的海外资源加速下载网络服务,可以加速火山引擎VPC中的ECS云服务下载如Github、Huggingface等海外网站,当前该服务需要开白名单才能使用,可以通过提工单方式开启白名单功能。

  1. 进入VPC私有网络服务的控制台,点击左边菜单栏的公网访问服务,可以看到网际快车子服务。

picture.image

  1. 点击创建网际快车,在配置界面中选择相应的服务所在地域、带宽大小,并且关联要加速的VPC私有网络。

picture.image

  1. 网际快车服务创建完成后在服务列表界面可以看创建好的服务名称,以及分配到的加速IP地址和加速的端口号3128,接下来只需要将网际快车关联VPC中的ECS云服务器上配置该加速IP和端口。

picture.image

  1. 登录到ECS中进行配置
    1. 常规加速 HTTP/HTTPS
    export HTTP_PROXY=http://vip:3128
    export HTTPS_PROXY=http://vip:3128export http_proxy=http://vip:3128
    export https_proxy=http://vip:3128
    
    • 注意部分命令的大小写敏感,如wget只能设置成小写http_proxy和https_proxy而非HTTP_PROXY和HTTPS_PROXY

    1. 加速 docker 镜像拉取可参考 Docker 官网文档,配置 「HTTP/HTTPS proxy」
    HTTP_PROXY=http://proxy.example.com:80
    HTTPS_PROXY=https://proxy.example.com:443
    替换为
    HTTP_PROXY=http://加速ip:3128
    HTTPS_PROXY=http://加速ip:3128
    
    • 注意 HTTPS_PROXY 中的配置的是 http,而不是 https

    1. 加速 Github HTTPS 方式 clone 代码
    // for github.com and git version > 1.8.5
    git config --global http.https://github.com.proxy http://vip:3128
    
    // for other cases
    git config --global http.proxy http://vip:3128
    git config --global https.proxy http://vip:3128
    

安装配置GPU服务器

  1. 更新apt资源列表:apt-get update

picture.image

  1. 安装Git工具包
    apt install git glf
    
  2. 使用nvidia-smi查看ECS的GPU信息,包括显卡规格型号、数量、CUDA驱动版本等信息,火山引擎默认提供11.4的CUDA驱动版本。

picture.image

  1. 升级CUDA驱动(可选): 火山引擎为GPU机型提供的Ubuntu操作系统默认采用11.4的CUDA驱动,可以选择自己升级CUDA驱动版本,方法如下。

    1. 升级新CUDA驱动版本前需要把使用旧版本驱动的服务进程都关闭,否则会报错无法升级。因为火山引擎Ubuntu20.04的操作系统中的监控服务默认使用CUDA驱动,使用下面的命令先关闭监控服务。
      systemctl stop cloud-monitor-agent
      
    2. 从英伟达官网https://developer.nvidia.com/cuda-downloads下载所需版本的CUDA工具包到ECS本地云盘中的某个文件中,工具下载页面会自动生成下载和安装运行命令,下图下载了11.6版本的cuda_11.6.0_510.39.01_linux.run工具包。

    picture.image

    picture.image

    1. 运行sh cuda_11.6.0_510.39.01_linux.run命令安装更新,会跳出用户授权界面,输入accept后选择需要安装的工具组件。 picture.image

    picture.image

    1. 更新完驱动后,再次输入nvidia-smi命令,可以看到CUDA驱动的版本由原来的11.4升级到了11.6。

    picture.image

    1. 重新开启火山引擎默认的ECS监控服务、

      systemctl start cloud-monitor-agent
      
  2. 安装Conda环境:

    1. 下载Conda安装包到ECS本地 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2022.10-Linux-x86_64.sh,然后运行bash ./Anaconda3-2022.10-Linux-x86_64.sh命令安装Conda程序。

    2. 同意安装条款,默认会安装到/root/Anaconda3目录下,选择yes将Conda的安装路径写入到.bashrc中。 picture.image

    3. 因为Conda安装在Ubuntu服务器上,所以选择不安装Visual Studio Code开发工具 picture.image

    4. Conda安装成功后需要重新打开一个终端窗口才能生效,输入Conda -V查看版本信息。

      picture.image

    5. 更新Conda国内镜像源:因为conda默认使用的是官方镜像源是在国外,安装下载速度会很慢,一般建议添加国内的清华镜像源

      #添加Anaconda的TUNA镜像
      conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
      conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
      
      #第三方镜像源
      ##  Conda Forge
      conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
      ## msys2
      conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
      ## bioconda
      conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
      ## menpo
      conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/menpo/
      ## pytorch
      conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
      
    6. 设置SSL认证方式为false,确保后续创建conda虚拟环境时从镜像源能成功安装组件。

      conda config --set ssl_verify false
      
    7. 输入 conda config --show channels查看镜像源是否添加成功

      picture.image

部署ChatGLM模型:

  部署推理服务

  1. 创建一个chatglm的Conda虚拟环境

    conda create -n chatglm python=3.8
    

    picture.image

  2. 使用conda activate chatglm命令激活conda虚拟环境

    picture.image

  3. 下载ChatGLM-6B源代码到服务器本地上

    git clone https://github.com/THUDM/ChatGLM-6B
    
  4. 进入到ChatGLM-6B文件夹中,使用pip命令安装requirements.txt中的组件,-i 参数使用火山的pip源

    pip install -r requirements.txt -i https://mirrors.ivolces.com/pypi/simple/
    

    picture.image

  5. 下载ChatGLM-6B模型:因为从Hugging Face Hub 上下载模型的checkpoint 的速度很慢,我们把模型先保存到本地。在ChatGLM-6B文件夹中用mkdir命令创建一个model文件夹,从Huggingface上下载ChatGLM-6B的model card (https://huggingface.co/THUDM/chatglm-6b)到model文件夹中,从 Hugging Face Hub 下载模型需要先安装Git LFS,我们在准备工作阶段已经安装过。

    git clone https://huggingface.co/THUDM/chatglm-6b
    

picture.image

  1. ChatGLM-6B的源代码中提供了网页版Demo和CLI版Demo,根据我们的配置环境修改对应的代码
  • 网页版demo

    • 修改文件web_demo.py中模型的本地加载地址为存放ChatGLM-6B是checkpoint地址,如model/chagtlm-6b。 picture.image

    • 修改web_demo.py最后一行,增加server_name="0.0.0.0", server_port=1234两个参数,使得我们能从浏览器1234端口访问web端的demo页面。

    picture.image

    • 在命令行中输入python web_demo.py启动web_demo picture.image
    • 在ECS控制台上找到GPU ECS的EIP地址,加上1234端口在浏览器中进行web demo的体验 picture.image
  • CLI版Demo

    • 修改cli_demo.py文件中模型的本地加载地址为存放ChatGLM checkpoint的地址,如model/chagtlm-6b。 picture.image

    • 运行python cli_demo.py启动CLI Demo
      picture.image

单卡精调训练

对于ChatGLM-6B 模型基于 P-Tuning v2 的微调。P-Tuning v2 将需要微调的参数量减少到原来的 0.1%,再通过模型量化、Gradient Checkpoint 等方法,最低只需要 7GB 显存即可运行。下面以 ADGEN (广告生成) 数据集为例介绍精调的使用方法。

  1. 安装依赖包

    pip install rouge_chinese nltk jieba datasets -i https://mirrors.ivolces.com/pypi/simple/
    
  2. 安装cuda toolkit,cuda tookit在火山内部有ubuntu的镜像源,下载安装会非常快。

    apt install nvidia-cuda-toolkit
    

    picture.image

  3. 安装成功后可以在命令行输入nvcc -V查看cuda编译工具版本号

    picture.image

  4. 进入ptuning文件夹,下载并解压ADGEN广告训练数据集,数据集为根据输入(content)生成一段广告词(summary)如下

    {
        "content": "类型#上衣*版型#宽松*版型#显瘦*图案#线条*衣样式#衬衫*衣袖型#泡泡袖*衣款式#抽绳",
        "summary": "这件衬衫的款式非常的宽松,利落的线条可以很好的隐藏身材上的小缺点,穿在身上有着很好的显瘦效果。领口装饰了一个可爱的抽绳,漂亮的绳结展现出了十足的个性,配合时尚的泡泡袖型,尽显女性甜美可爱的气息。"
    }
    
  5. 使用单GPU卡精调:编辑train.sh 可以修改精调训练的配置参数,为了保证单卡显存不会OOM,可以参考如下图配置。

    picture.image

  6. 命令行中输入bash train.sh启动模型精调训练

    picture.image

多卡精调训练

通过使用DeepSpeed分布式并行训练框架进行模型全参数的精调,多机多卡的分布式训练可以大大节约精调训练的时间,此处以A10双卡并行精调训练。

  1. 安装DeepSpeed组件
pip install deepspeed -i https://mirrors.ivolces.com/pypi/simple/
  1. 修改ds_train_finetune.sh文件,将--num_gpu修改为多卡训练中的gpu卡数量,为了保证双卡并行训练时显存不会OOM,其他参数可以参考如下图配置。

    picture.image

  2. 运行bash ds_train_finetune.sh命令进行双卡训练精调,大约只需要40分钟就能完成精调训练训练。 picture.image

  3. 在ECS的监控服务中可以查看到两张A10卡显存和GPU使用率。

    picture.image

4615
3
0
2
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论