通过GPU云服务器生成个人版对话大模型

更新时间:
复制为 MD 格式

本实验介绍如何在阿里云GPU云服务器上基于Alpaca大模型快速搭建个人版“对话大模型”。

场景简介

重要
  • 阿里云不对第三方模型的合法性、安全性、准确性进行任何保证,阿里云不对由此引发的任何损害承担责任。

  • 您应自觉遵守第三方模型的用户协议、使用规范和相关法律法规,并就使用第三方模型的合法性、合规性自行承担相关责任。

Alpaca大模型是一款基于LLaMA的大语言模型,它可以模拟自然语言进行对话交互,并协助用户完成写作、翻译、编写代码、生成脚本等一系列创作任务。同时,使用了中文数据进行二次预训练,提升了中文基础语义理解能力。

本实验基于阿里云GPU服务器和Alpaca大模型,指导您如何快速搭建个人版“对话大模型”。

背景知识

  • GPU云服务器

    GPU云服务器(GPU Cloud Computing,GPU)是提供 GPU 算力的弹性计算服务,具有超强的计算能力,服务于深度学习、科学计算、图形可视化、视频处理多种应用场景。阿里云作为亚太第一的云服务提供商,随时为您提供触手可得的算力,有效缓解计算压力,提升您的业务效率,助您提高企业竞争力。

了解更多信息,详情请参见0快速搭建个人版“对话大模型”

前提条件

云起实验室将在您的账号下开通本次实操资源,资源按量付费,需要您自行承担本次实操的云资源费用。

重要

本实验预计两个小时产生费用20元,其中0.8元/G公网流量。如果您调整了资源规格、使用时长,或执行了本方案以外的操作,可能导致费用发生变化,请以控制台显示的实际价格和最终账单为准。

进入实操前,请确保阿里云账号满足以下条件:

  • 已通过实名认证并且账户余额大于100。

  • 云资源产生的费用需您自行承担,云起实验室不会向您征收额外费用。

  • 所有实验操作将保留至您的账号,请谨慎操作。

  • 实操结束后,您可以选择继续付费保留资源,或参考手册自动/手动释放资源。

创建专有网络VPC和交换机

  1. 在实验室页面右侧的操作区中,我已阅读并同意《阿里云云起实践平台服务协议》,单击开始实操

  2. 前往专有网络管理控制台

  3. 在左侧导航栏中,单击专有网络

    image

  4. 专有网络页⾯,单击创建专有网络

    image

  5. 创建专有网络页⾯,根据下方参数说明配置1个专有网络(VPC)和1台交换机,然后单击确定。更多关于创建专有网络和交换机信息,详情请参见创建和管理专有网络

    配置项

    说明

    专有网络

    地域

    本实验以华东1(杭州)为例。

    名称

    自定义名称。

    IPv4网段

    选择手动输入IPv4地址段

    输入IPv4网段

    输入IPv4网段,建议您使用RFC私网地址作为专有网络的网段如10.0.0.0/8172.16.0.0/12192.168.0.0/16

    交换机

    名称

    自定义名称。

    可用区

    选择杭州可用区J。

    IPv4网段

    使用默认的IPv4网段即可。

    Image 21.png

    Image 23.png

  6. 创建专有网络页面,您可查看到创建的专有网络VPC和交换机的ID实例名称等信息。

    Image 24.png

创建ECS实例

  1. 前往实例创建页

  2. 在云服务器购买页面,参考如下说明配置参数,未提及的配置保持默认或按需修改,然后选中右侧的我已阅读并同意云服务器(按量付费)专属条款、镜像商品使用条款,单击确认下单

    参数

    示例

    付费类型

    选择按量付费

    地域

    本实验以华东1(杭州)为例。

    网络及可用区

    选择您创建的专有网络和交换机。

    实例

    选择ecs.gn7i-c16g1.4xlarge

    镜像

    选择公共镜像Ubuntu 22.04,并选中安装GPU驱动,选择CUDA 版本12.4.1/Driver 版本550.90.07/CUDNN 版本9.2.0.82

    系统盘

    不小于200 GiB

    公网IP

    开启分配公网IPv4地址

    带宽计费模式

    选择按使用流量

    本教程以按使用流量为例,您可根据实际情况选择按固定带宽或按使用流量。

    带宽峰值

    带宽峰值设置为100 Mbps。以加快模型下载速度。

    安全组

    选择新建安全组

    安全组类型

    选择普通安全组

    开通IPv4端口/协议

    保持默认即可。

    登录凭证

    为当前ECS实例设置登录密码,选择自定义密码

    登录密码

    自定义设置登录密码。

    确认密码

    再次输入登录密码。

    image

    image

    image

    image

    image

  3. 创建成功对话框中,单击管理控制台

  4. 实例页面,等待状态变为运行中后,即可使用该云服务器ECS。

    image

  5. 添加安全组规则。

    ECS实例安全组的入方向添加安全组规则并放行7860端口。

    1. 实例页面,单击实例ID

      image

    2. 实例详情页签,单击安全组

      image

    3. 安全组页签,单击安全组ID

      image

    4. 访问规则区域的入方向中,添加7860端口,单击保存开放该端口后可以访问WebUI。

      重要

      添加端口时,授权对象建议选择您的本机IP地址

      image

  6. 查看驱动以及CUDA库是否安装成功。

    1. 前往云服务器ECS控制台

    2. 在左侧导航栏中,选择实例与镜像 > 实例

      image

    3. 实例页面,找到目标ECS实例,单击其右侧操作列下的远程连接

      image

    4. 远程连接对话框中,单击通过Workbench远程连接区域下的立即登录

      image

    5. 登录实例对话框中,输入用户自定义密码,单击确定

      image

    6. 首次登录ECS实例时,系统会自动安装驱动。当显示如下图所示的回显信息时,表示驱动以及CUDA库已安装成功。

      重要
      • 系统自动安装驱动以及CUDA库时,请不要手动操作或者重启实例,否则可能会导致驱动或者CUDA库安装失败。等到安装驱动以及CUDA库完成以后,系统会自动重启。

      • 如果创建完ECS实例后,没有立即远程登录ECS实例,可能看不到类似下图的回显信息。

      image

    7. 执行以下命令,查看GPU驱动的版本。

      nvidia-smi

      回显信息类似下图所示。

      image

    8. 执行以下命令,查看CUDA库的版本。

      nvcc -V

      回显信息如下图所示。

      image

配置软件

  1. 安装Python 3.11并升级pip。

    1. 分别执行以下命令,安装Python 3.11。

      apt-get update
      apt-get upgrade
      apt install -y python-is-python3 # 将默认Python改成Python3
      apt install -y software-properties-common   # 安装software-properties-common软件包
      add-apt-repository ppa:deadsnakes/ppa       # 添加PPA存储库
      apt -y install python3.11       # 安装Python 3.11
      update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 1 # 设置默认PythonPython 3.11
    2. 执行如下命令,查看Python版本。

      python --version

      当回显如下所示时,表示已安装Python 3.11.11。

      image

    3. 分别执行以下命令,升级pip。

      wget https://bootstrap.pypa.io/get-pip.py
      python3.11 get-pip.py
  2. 执行以下命令,安装GitGit LFS软件。

    apt install -y git git-lfs python3.11-distutils
  3. 依次执行以下命令,安装模型所需要的Python包。

    重要

    GitHub上下载Transformers库,由于网络原因偶尔可能会不成功,建议您多尝试几次。

    sudo apt-get install pkg-config cmake
    sudo apt-get install python3.11-dev
    pip install git+https://github.com/huggingface/transformers
    pip install sentencepiece==0.1.97 -i https://mirrors.aliyun.com/pypi/simple
    pip install peft==0.10.0 -i https://mirrors.aliyun.com/pypi/simple
  4. PyTorch环境下验证GPU是否正常工作。

    1. 执行以下命令,进入PyTorch环境。

      python
    2. 执行以下命令,验证GPU是否正常工作。

      import torch
      torch.cuda.is_available()

      返回True,表示GPU正常工作。

      image

    3. 执行以下命令,退出Python。

      quit()

下载与配置模型

  1. 依次执行以下命令,下载tmux并创建一个tmux session。

    重要

    下载模型耗时较长,建议在tmux session中下载,以免ECS断开连接导致下载中断。

    apt install -y tmux
    tmux
  2. 执行以下命令,下载Chinese-LLaMA-Alpaca模型。

    git clone https://github.com/ymcui/Chinese-LLaMA-Alpaca.git
  3. 执行以下命令,下载chinese-alpaca-lora-13b模型。

    git clone https://www.modelscope.cn/ChineseAlpacaGroup/chinese-alpaca-lora-13b.git
  4. 依次执行以下命令,下载llama-13b-hf。

    llama-13b-hf是预训练的llama 13b模型,已经转换成了Huggingface的模型格式。下载llama-13b-hf大约有40 GiB的数据,预估下载时间约30分钟,请您耐心等待。

    重要

    LLaMA是第三方提供的Huggingface格式的预训练模型数据。Meta官方发布的LLaMA模型禁止商用,并且官方暂时还没有正式开源模型权重。这里使用这个下载链接只为做演示使用,不承担任何法律责任。

    pip install -U huggingface_hub
    pip install -U hf-transfer
    export HF_ENDPOINT=https://hf-mirror.com
    export HF_HUB_ENABLE_HF_TRANSFER=1
    huggingface-cli download --resume-download --local-dir-use-symlinks False yahma/llama-13b-hf --local-dir llama-13b-hf
  5. 依次执行以下命令,合并代码。

    说明

    命令行中需要用--output_dir命令指定一个输出目录,本实验中输出目录为/root/Chinese-LLaMA-Alpaca/llama_with_lora_hf。转换需要一段时间,需要耐心等待。

    cd Chinese-LLaMA-Alpaca/
    python scripts/merge_llama_with_chinese_lora.py --base_model ~/llama-13b-hf/ \
            --lora_model ~/chinese-alpaca-lora-13b/ --output_type huggingface \
            --output_dir ./llama_with_lora_hf
  6. 执行以下命令,查看转换完成后的文件。

    ls -lh llama_with_lora_hf

    image

部署WebUI

  1. 执行以下命令,在/root目录或者您的工作目录,下载WebUI并且进行代码部署。

    cd
    git clone https://github.com/oobabooga/text-generation-webui.git
  2. 执行以下命令,安装代码及依赖库。

    说明

    安装代码及依赖库涉及从Github下载代码,可能会因为网络原因运行失败,请多试几次。

    cd text-generation-webui/
    pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple
    pip install datasets gradio rich bitsandbytes -i https://mirrors.aliyun.com/pypi/simple/
  3. 执行以下命令,在models目录下面生成一个软链接,指向合并后模型数据的目录。

    ln -s /root/Chinese-LLaMA-Alpaca/llama_with_lora_hf/ models/llama_with_lora_hf

    参数说明如下:

    • /root/Chinese-LLaMA-Alpaca/llama_with_lora_hf/:指的是合并模型存放的目录,您可以从合并代码步骤获取。

    • models/llama_with_lora_hf:指的是模型名称,您可以修改成其他名称。

验证结果

完成以上操作后,您已经成功完成了WebUI部署和个人版对话大模型的搭建。您可以在WebUI页面,进行验证。

  1. 执行以下命令,运行WebUI。

    cd text-generation-webui/
    python server.py --model llama_with_lora_hf --listen --chat --load-in-8bit

    参数说明如下:

    • --model:指定的是上一小节中生成的软链接的名称,不需要带前面的model/目录名。本实验软链接的名称为llama_with_lora_hf

    • --listen:用于设置WebUI监听所有外部IP(不配置--listen默认只能监听本地IP),以实现从实例外访问WebUI。默认监听端口是7860,您可通过--listen-port来指定其他监听端口。

    • --chat:用于指定默认的运行模式,本文示例为对话模式(可按需尝试其他模式)。

    • --load-in-8bit:用于指定以8bit模式加载模型。正常加载13B模型需要26 GB以上显存,A10显卡只有24 GB,所以需要以8bit模式加载,模型占用显存大约为15 GB。

    当显示如下图所示的回显信息时,表示运行WebUI成功。

    image

  2. ECS实例页面,获取ECS实例的公网IP地址。

  3. 在浏览器中输入http://<ECS实例公网IP地址>:7860,即可访问个人版对话大模型。

    您可以输入相应的问题和AI机器人进行对话。

    image

清理及后续

  • 在完成实验后,如果无需继续使用资源,请根据以下步骤,先删除相关资源后,再结束实操。

    • 删除云服务器ECS。

      1. 进入云服务器ECS控制台

      2. 在左侧导航栏中,选择实例与镜像 > 实例

        image

      3. 实例页面,找到目标ECS实例,选择其右侧操作列下的image图标 > 实例状态 > 释放

        image

      4. 释放对话框中,选择立即释放,单击下一步

        image

      5. 释放对话框中,勾选我已知晓即将释放的资源与关联资源,并了解相关数据风险,单击确认image

    • 删除安全组。

      1. 前往云服务器ECS控制台

      2. 在左侧导航栏中,选择网络与安全 > 安全组

        image

      3. 安全组页面,找到目标安全组,单击其右侧操作列下的删除

        image

      4. 删除安全组对话框中,单击确定

        image

    • 删除VPC和交换机。

      1. 前往专有网络管理控制台

      2. 在左侧导航栏中,单击交换机

        image

      3. 在单击交换机右侧的删除按钮。

        image

      4. 在弹出的删除交换机对话框中,单击确定

        image

      5. 在左侧导航栏中,单击专有网络

        image

      6. 单击VPC右侧删除按钮。

        image

      7. 在删除专有网络对话框中,单击确定

        image

    • 删除相关资源后,选择不保留资源,单击结束实操。在结束实操对话框中,单击确定

      image

  • 在完成实验后,如果需要继续使用资源,选择付费保留资源,单击结束实操。在结束实操对话框中,单击确定。请随时关注账户扣费情况,避免发生欠费。

    image