目录

使用阿里云机器学习平台部署ChatGLM2-6B

最近在学习大模型相关内容的时候,由于本地没有强大的显卡资源,很多模型是跑不起来的,但是看到阿里云机器学习平台PAI提供了一些免费的试用资源,于是准备薅一波羊毛,亲自玩一波大模型开发与微调。

接下来我将通过一系列的文章来记录一下,使用阿里云的免费资源来玩一些好玩的AIGC相关应用,主要包括ChatGLM2-6B、Llama2、通义千问、Stable Diffusion,模型微调相关的内容。

理解一些概念

首先我们先来理解阿里云PAI中的几个概念。

  1. PAI,机器学习PAI(Platform of Artificial Intelligence)是阿里云人工智能平台,提供一站式的机器学习解决方案。本文为您介绍什么是机器学习PAI。
  2. PAI-Designer,是基于云原生架构Pipeline Service – PAIFlow的可视化建模工具。
  3. PAI-DSW,PAI-DSW是一款云端机器学习开发IDE,为您提供交互式编程环境,PAI-DSW集成了开源JupyterLab,VScode,Terminal,简单的理解为,DSW提供了一个服务器,并且提供了notebook, vscode,ternimal 的交互工具,如果你用过colab,可以很轻松的上手。
  4. PAI-DLC, 云原生AI基础平台PAI-DLC(Deep Learning Containers)
  5. PAI-EAS,针对在线推理场景提供了在线预测服务PAI-EAS(Elastic Algorithm Service)。支持将模型服务部署在公共资源组或专属资源组,EAS可以简单的理解为,阿里云提供了一些常用模式的镜像,你只需要选择相应配置的云服务器,就可以非常快速的将大模型应用跑起来。

PAI 是机器学习平台的总称,下面有四个子服务,PAI-Designer, PAI-DSW,PAI-DLC,PAI-EAS,

https://yyxbloguse.oss-cn-beijing.aliyuncs.com/img/20230820211057.png

开通机器学习平台PAI-DSW

作为学习与体验,我们先领一下阿里云为我们提供的免费试用资源,进入 https://free.aliyun.com/

过滤出机器学习平台PAI,这里我们先开通一下PAI-DSW,PAI-EAS 这两个产品的试用。本次教程是在PAI-DSW中运行的。

https://yyxbloguse.oss-cn-beijing.aliyuncs.com/img/20230820212242.png

开通以后,进入PAI管理页面,这个页面注意下header栏显示的地区,不同的地区是不共享的,比如下图是在杭州,当我点击了这里的开通PAI并创建默认工作空间以后,当切换到别的区,如北京,则不会展示杭州开通的PAI,如果北京下没有PAI空间,则依然会像下图那样提示要开通PAI空间。这里找个离你比较离的地方开个PAI空间吧。

https://yyxbloguse.oss-cn-beijing.aliyuncs.com/img/20230820212712.png

https://yyxbloguse.oss-cn-beijing.aliyuncs.com/img/20230820213543.png

在开通空间页面,有个组合开通选项,这三荐都是可开可不开的,第二个和第三个看不懂就先取消勾选了吧,第一个OSS即使开通过了如果不存数据的话也不会收费的。

开通以后,我们进入PAI空间,选择交互式建模(DSW), 右边选择工作空间,由于目前只有一个空间,所以这里默认就是那个空间,再点击“进入DSW”按钮。

https://yyxbloguse.oss-cn-beijing.aliyuncs.com/img/20230820214053.png

这里我们需要先创建一个实例,点击页面上的“创建实例”按钮进入配置实例页面。

https://yyxbloguse.oss-cn-beijing.aliyuncs.com/img/20230820214252.png

在配置实例页面,填写实例名称。

https://yyxbloguse.oss-cn-beijing.aliyuncs.com/img/20230820214440.png

在资源组选择上要注意,无论是CPU规格,还是GPU规格,要选择下面带有(支持资源包抵扣)标识的,这样的机器才能用刚才领的免费试用资源,否则就要真实的扣费了,这里我选择了一张A100显卡。

https://yyxbloguse.oss-cn-beijing.aliyuncs.com/img/20230820214606.png

之后的存储资源也不用修改,默认阿里云分配了100G存储资源,对于我们学习来讲足够了。

https://yyxbloguse.oss-cn-beijing.aliyuncs.com/img/20230820215148.png

镜像管理这里我选择了pytorch:1.12-gpu-py39-cu113-ubuntu20.04 这个镜像,这个需要GPU和你程序Python版本要求。

https://yyxbloguse.oss-cn-beijing.aliyuncs.com/img/20230820215240.png

网络配置目前也不需要修改。网页上会显示报价,以目前的配置来讲,一个小时是29.11,还是很贵的!不过这个可以从我们刚刚领取的DSW免费试用资源中扣除,这里不用担心会真实扣费。点击下一步按钮进入订单确认页面,如果没有问题的话,点击“创建实例”按钮。

https://yyxbloguse.oss-cn-beijing.aliyuncs.com/img/20230820215402.png

稍等片刻,大概5分钟左右吧,实例会创建成功。之后我们就开始部署ChatGLM2-6B模型了!

环境准备

实例创建成功以后,点击实例后面的“打开”连接,进入Workshop页面。

https://yyxbloguse.oss-cn-beijing.aliyuncs.com/img/202308171448439.png

workshop 页面有三种交互方式,Notebook, WebIDE,Terminal,这里我切换到Terminal来进行接下来的操作,在这个终端里操作就和我们操作Linux一样的。

https://yyxbloguse.oss-cn-beijing.aliyuncs.com/img/202308171449235.png

安装git-lfs

这里需要安装 git-lfs 工具,因为之后要下载的模型文件都非常大,每个文件1G多,所以需要安装这个工具,这个工具是在git中下载大文件使用的。

1
2
apt-get update
apt-get install git-lfs

下载ChatGLM2-6B

这里下载的是ChatGLM2-6B的运行文件,这个仓库提供了ChatGLM2的webui界面以及微调程序,这个后面会介绍。

1
git clone git@github.com:THUDM/ChatGLM2-6B.git

下载完仓库安装Python 依赖

1
2
cd ChatGLM2-6B
pip install -r requirements.txt

下载ChatGLM2-6B模型

这次才是真正地下载模型文件,我创建一个model文件夹,将模型下载到model目录下,这个路径要记住,之后会用的上。

1
2
3
mkdir model
cd model
git clone https://huggingface.co/THUDM/chatglm2-6b

这个下载时间很长,耐心等待。

https://yyxbloguse.oss-cn-beijing.aliyuncs.com/img/202308181129881.png

漫长的等待以后,终于下载完了,之后就到了激动人心的时刻了,我们来启动程序。

两种启动方式

ChatGLM2 为我们提供了两种web方式方式,一种是基于gradio的web_demo.py, 另外一种是基于streamlit的web_demo2.py,我们依次体验一下。

修改web_demo.py

1
2
tokenizer = AutoTokenizer.from_pretrained("model/chatglm2-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("model/chatglm2-6b", trust_remote_code=True).cuda()

只需要修改下这里的模型路径即可,上面我将模型下载到model目录下,这里写相对目录就行,保存并使用 python web_demo.py 启动程序,程序会加载模型,首次启动会慢一些。

https://yyxbloguse.oss-cn-beijing.aliyuncs.com/img/202308181149114.png

点击 Running on local URL: http://127.0.0.1:7860 , 这时会自动跳转到阿里云提供的外网url 即可实现聊天对话。这个url需要记录下来,之后在使用streamlit启动web服务时还需要使用。

我们尝试向ChatGLM2问一些问题。

https://yyxbloguse.oss-cn-beijing.aliyuncs.com/img/202308181151124.png

ChatGLM2的逻辑推理能力确实比ChatGLM要好一些。

接着我们修改基于streamlit的web_demo2.py文件,同样只需要修改模型路径即可。

1
2
3
4
5
6
@st.cache_resource
def get_model():
    tokenizer = AutoTokenizer.from_pretrained("model/chatglm2-6b", trust_remote_code=True)
    model = AutoModel.from_pretrained("model/chatglm2-6b", trust_remote_code=True).cuda()
    model = model.eval()
    return tokenizer, model

启动命令为 streamlit run web_demo2.py

它提示启动成功以后,这时并不能使用下面展示的url进行访问。

1
2
3
4
5
6
7
Collecting usage statistics. To deactivate, set browser.gatherUsageStats to False.


  You can now view your Streamlit app in your browser.

  Network URL: http://10.224.172.49:8501
  External URL: http://39.107.58.222:8501

这两个url都不能访问,我们需要使用运行web_demo.py时的url,如 https://dsw-gateway-cn-beijing.data.aliyun.com/dsw-xxxx/proxy/7860/ , 将最后的7860换成streamlit的端口号8501,最后拼成的url为 https://dsw-gateway-cn-beijing.data.aliyun.com/dsw-xxxx/proxy/8501/,这样就可以访问web页面了。

ChatGLM2 还提供了两种使用api方式调用的程序,api.py和openai_api.py 文件。这两个文件也是修改完模型路径行就可以了,但是目前只能在阿里云内部使用,并没有一个公网的地址可以访问到,这块先挖个坑,后面有空了再填上。

总结

本文主要讲了阿里云机器学习平台PAI的相关概念,并且通过PAI-DSW成功部署了ChatGLM2-6B模型,总得来说,过程还是比较简单的,涉及的修改内容也不是很多。

后面我们来看一下如何使用PAI-EAS部署ChatGLM模型,使用PAI-EAS整体流程会比PAI-DSW更加简单。