From 5a7c6ae0f9de993faf7f8a22db6a9598e6a8bdc9 Mon Sep 17 00:00:00 2001 From: RangeKing Date: Sun, 31 Dec 2023 09:58:34 +0800 Subject: [PATCH 1/2] Add the missing blanks and unify the title formats --- README.md | 16 +++--- helloworld/hello_world.md | 104 +++++++++++++++++++------------------- langchain/readme.md | 20 ++++---- lmdeploy/lmdeploy.md | 55 ++++++++++---------- xtuner/README.md | 84 +++++++++++++++--------------- 5 files changed, 139 insertions(+), 140 deletions(-) diff --git a/README.md b/README.md index 04ae9faff..50d24b1bf 100644 --- a/README.md +++ b/README.md @@ -4,14 +4,14 @@ 为了推动大模型在更多行业落地开花,让开发者们更高效的学习大模型的开发与应用,上海人工智能实验室重磅推出书生·浦语大模型实战营,为广大开发者搭建大模型学习和实践开发的平台,两周时间带你玩转大模型微调、部署与评测全链路。 -## 你将获得 +## 😊 你将获得 -实力讲师:来自前沿科研机构、一线大厂和Github热门开源项目的讲师手把手教学 -算力支持:算力资源免费提供,助力无忧训练大模型 -专属社群:助教、讲师全程陪伴,提供录播回放、线上答疑及实战作业辅导 -官方认证:优秀学员将获得荣誉证书,优秀项目有机会被官方收录,获得更多展示 +👨‍🏫 实力讲师:来自前沿科研机构、一线大厂和 Github 热门开源项目的讲师手把手教学 +💻 算力支持:算力资源免费提供,助力无忧训练大模型 +💬 专属社群:助教、讲师全程陪伴,提供录播回放、线上答疑及实战作业辅导 +📜 官方认证:优秀学员将获得荣誉证书,优秀项目有机会被官方收录,获得更多展示 -## 课程安排 +## 📅 课程安排 |课程时间|课程内容|讲师|资料| |:-----|:----|:----|:-----| @@ -24,12 +24,12 @@ |第 7 节|彩蛋环节| 神秘嘉宾 | 文档、视频 | -## 作业 +## 📝 作业 助教老师将在社群中公布每节课的作业及提交方式 -## 算力平台 +## 🖥️ 算力平台 https://studio.intern-ai.org.cn/ diff --git a/helloworld/hello_world.md b/helloworld/hello_world.md index f405b8e2f..b99f86419 100644 --- a/helloworld/hello_world.md +++ b/helloworld/hello_world.md @@ -2,7 +2,7 @@ ![](./images/head.png) -## 1. 大模型及InternLM模型简介 +## 1 大模型及InternLM模型简介 ### 1.1 什么是大模型? @@ -22,27 +22,27 @@   浦语·灵笔是基于书生·浦语大语言模型研发的视觉-语言大模型,提供出色的图文理解和创作能力,结合了视觉和语言的先进技术,能够实现图像到文本、文本到图像的双向转换。使用浦语·灵笔大模型可以轻松的创作一篇图文推文,也能够轻松识别一张图片中的物体,并生成对应的文本描述。 -  上述提到的所有模型,都会带领大家一起体验哦!欢迎大家来给`InternLM`: https://github.com/internLM/internLM/ 点点 star 哦! +  上述提到的所有模型,都会带领大家一起体验哦!欢迎大家来给 `InternLM`: https://github.com/InternLM/InternLM/ 点点 star 哦! -## 2. InternLM-Chat-7B 智能对话 Demo +## 2 InternLM-Chat-7B 智能对话 Demo 本小节我们将使用[InternStudio](https://studio.intern-ai.org.cn/)中的 A100(1/4) 机器和`InternLM-Chat-7B`模型部署一个智能对话 Demo。 ### 2.1 环境准备 -在[InternStudio](https://studio.intern-ai.org.cn/)平台中选择 A100(1/4) 的配置,如下图所示镜像选择`Cuda11.7-conda`,如下图所示: +在[InternStudio](https://studio.intern-ai.org.cn/)平台中选择 A100(1/4) 的配置,如下图所示镜像选择 `Cuda11.7-conda`,如下图所示: ![Alt text](images/image.png) -接下来打开刚刚租用服务器的`进入开发机`,并且打开其中的终端开始环境配置、模型下载和运行`demo`。 +接下来打开刚刚租用服务器的`进入开发机`,并且打开其中的终端开始环境配置、模型下载和运行 `demo`。 ![Alt text](images/image-1.png) -进入开发机后,在页面的左上角可以切换`JupyterLab`、`终端`和`VScode`,并在终端输入`bash`命令,进入`conda`环境。如下图所示: +进入开发机后,在页面的左上角可以切换 `JupyterLab`、`终端`和 `VScode`,并在终端输入 `bash 命令,进入 `conda` 环境。如下图所示: ![Alt text](images/image-11.png) -进入`conda`环境之后,使用以下命令从本地克隆一个已有的`pytorch 2.0.1` 的环境 +进入 `conda` 环境之后,使用以下命令从本地克隆一个已有的 `pytorch 2.0.1` 的环境 ```shell bash # 请每次使用 jupyter lab 打开终端时务必先执行 bash 命令进入 bash 中 @@ -55,7 +55,7 @@ conda create --name internlm-demo --clone=/root/share/conda_envs/internlm-base conda activate internlm-demo ``` -并在环境中安装运行demo所需要的依赖。 +并在环境中安装运行 demo 所需要的依赖。 ```shell # 升级pip @@ -69,7 +69,7 @@ pip install accelerate==0.24.1 ``` ### 2.2 模型下载 -[InternStudio](https://studio.intern-ai.org.cn/)平台的`share`目录下已经为我们准备了全系列的`InternLM`模型,所以我们可以直接复制即可。使用如下命令复制: +[InternStudio](https://studio.intern-ai.org.cn/)平台的 `share` 目录下已经为我们准备了全系列的 `InternLM` 模型,所以我们可以直接复制即可。使用如下命令复制: ```shell mkdir -p /root/model/Shanghai_AI_Laboratory @@ -77,9 +77,9 @@ cp -r /root/share/temp/model_repos/internlm-chat-7b /root/model/Shanghai_AI_Labo ``` > -r 选项表示递归地复制目录及其内容 -也可以使用 `modelscope` 中的`snapshot_download`函数下载模型,第一个参数为模型名称,参数`cache_dir`为模型的下载路径。 +也可以使用 `modelscope` 中的 `snapshot_download` 函数下载模型,第一个参数为模型名称,参数 `cache_dir` 为模型的下载路径。 -在 `/root` 路径下新建目录`model`,在目录下新建 `download.py` 文件并在其中输入以下内容,粘贴代码后记得保存文件,如下图所示。并运行 `python /root/model/download.py`执行下载,模型大小为 14 GB,下载模型大概需要 10~20 分钟 +在 `/root` 路径下新建目录`model`,在目录下新建 `download.py` 文件并在其中输入以下内容,粘贴代码后记得保存文件,如下图所示。并运行 `python /root/model/download.py` 执行下载,模型大小为 14 GB,下载模型大概需要 10~20 分钟 ```python import torch @@ -88,33 +88,33 @@ import os model_dir = snapshot_download('Shanghai_AI_Laboratory/internlm-chat-7b', cache_dir='/root/model', revision='v1.0.3') ``` -> 注意:使用`pwd`命令可以查看当前的路径,`JupyterLab`左侧目录栏显示为`/root/`下的路径。 +> 注意:使用 `pwd` 命令可以查看当前的路径,`JupyterLab` 左侧目录栏显示为 `/root/` 下的路径。 ![image](images/image-2.png) ### 2.3 代码准备 -首先`clone`代码,在`/root`路径下新建`code`目录,然后切换路径, clone代码. +首先 `clone` 代码,在 `/root` 路径下新建 `code` 目录,然后切换路径, clone 代码. ```shell cd /root/code git clone https://gitee.com/internlm/InternLM.git ``` -切换commit版本,与教程commit版本保持一致,可以让大家更好的复现。 +切换 commit 版本,与教程 commit 版本保持一致,可以让大家更好的复现。 ```shell cd InternLM git checkout 3028f07cb79e5b1d7342f4ad8d11efad3fd13d17 ``` -将 `/root/code/InternLM/web_demo.py`中 29 行和 33 行的模型更换为本地的`/root/model/Shanghai_AI_Laboratory/internlm-chat-7b`。 +将 `/root/code/InternLM/web_demo.py`中 29 行和 33 行的模型更换为本地的 `/root/model/Shanghai_AI_Laboratory/internlm-chat-7b`。 ![image-3](images/image-3.png) ### 2.4 终端运行 -我们可以在`/root/code/InternLM`目录下新建一个`cli_demo.py`文件,将以下代码填入其中: +我们可以在 `/root/code/InternLM` 目录下新建一个 `cli_demo.py` 文件,将以下代码填入其中: ```python import torch @@ -140,20 +140,20 @@ while True: print(f"robot >>> {response}") ``` -然后在终端运行以下命令,即可体验`InternLM-Chat-7B`模型的对话能力。对话效果如下所示: +然后在终端运行以下命令,即可体验 `InternLM-Chat-7B` 模型的对话能力。对话效果如下所示: ```shell python /root/code/InternLM/cli_demo.py ``` ![Alt text](images/image-18.png) -### 2.5 web demo运行 +### 2.5 web demo 运行 -我们切换到`VScode`中,运行`/root/code/InternLM`目录下的`web_demo.py`文件,输入以下命令后,[**查看本教程5.2配置本地端口后**](./hello_world.md#52-配置本地端口),将端口映射到本地。在本地浏览器输入`http://127.0.0.1:6006`即可。 +我们切换到 `VScode` 中,运行 `/root/code/InternLM` 目录下的 `web_demo.py` 文件,输入以下命令后,[**查看本教程5.2配置本地端口后**](./hello_world.md#52-配置本地端口),将端口映射到本地。在本地浏览器输入 `http://127.0.0.1:6006` 即可。 ```shell bash -conda activate internlm-demo # 首次进入vscode会默认是base环境,所以首先切换环境 +conda activate internlm-demo # 首次进入 vscode 会默认是 base 环境,所以首先切换环境 cd /root/code/InternLM streamlit run web_demo.py --server.address 127.0.0.1 --server.port 6006 ``` @@ -164,13 +164,13 @@ streamlit run web_demo.py --server.address 127.0.0.1 --server.port 6006 ![Alt text](images/image-5.png) -在加载完模型之后,就可以与InternLM-Chat-7B进行对话了,如下图所示: +在加载完模型之后,就可以与 InternLM-Chat-7B 进行对话了,如下图所示: ![Alt text](images/image-6.png) -## 3. Lagent 智能体工具调用 Demo +## 3 Lagent 智能体工具调用 Demo -本小节我们将使用[InternStudio](https://studio.intern-ai.org.cn/)中的 A100(1/4) 机器、`InternLM-Chat-7B`模型和`Lagent`框架部署一个智能工具调用 Demo。 +本小节我们将使用 [InternStudio](https://studio.intern-ai.org.cn/) 中的 A100(1/4) 机器、`InternLM-Chat-7B` 模型和 `Lagent` 框架部署一个智能工具调用 Demo。 Lagent 是一个轻量级、开源的基于大语言模型的智能体(agent)框架,支持用户快速地将一个大语言模型转变为多种类型的智能体,并提供了一些典型工具为大语言模型赋能。通过 Lagent 框架可以更好的发挥 InternLM 的全部性能。 @@ -193,7 +193,7 @@ pip install accelerate==0.24.1 ### 3.2 模型下载 -[InternStudio](https://studio.intern-ai.org.cn/)平台的`share`目录下已经为我们准备了全系列的`internLM`模型,所以我们可以直接复制即可。使用如下命令复制: +[InternStudio](https://studio.intern-ai.org.cn/) 平台的 `share` 目录下已经为我们准备了全系列的 `InternLM` 模型,所以我们可以直接复制即可。使用如下命令复制: ```shell mkdir -p /root/model/Shanghai_AI_Laboratory @@ -212,7 +212,7 @@ model_dir = snapshot_download('Shanghai_AI_Laboratory/internlm-chat-7b', cache_d ### 3.3 Lagent 安装 -首先切换路径到`/root/code` 克隆 `lagent`仓库,并通过 `pip install -e .`源码安装 `Lagent` +首先切换路径到 `/root/code` 克隆 `lagent` 仓库,并通过 `pip install -e .` 源码安装 `Lagent` ```shell cd /root/code @@ -224,7 +224,7 @@ pip install -e . # 源码安装 ### 3.4 修改代码 -由于代码修改的地方比较多,大家直接将`/root/code/lagent/examples/react_web_demo.py` 内容替换为以下代码 +由于代码修改的地方比较多,大家直接将 `/root/code/lagent/examples/react_web_demo.py` 内容替换为以下代码 ```python import copy @@ -451,25 +451,25 @@ if __name__ == '__main__': streamlit run /root/code/lagent/examples/react_web_demo.py --server.address 127.0.0.1 --server.port 6006 ``` -用同样的方法我们依然切换到`VScode`页面,运行成功后,[**查看本教程5.2配置本地端口后**](./hello_world.md#52-配置本地端口),将端口映射到本地。在本地浏览器输入`http://127.0.0.1:6006`即可。 +用同样的方法我们依然切换到 `VScode` 页面,运行成功后,[**查看本教程5.2配置本地端口后**](./hello_world.md#52-配置本地端口),将端口映射到本地。在本地浏览器输入 `http://127.0.0.1:6006` 即可。 -我们在 `Web` 页面选择 `InternLM` 模型,等待模型加载完毕后,输入数学问题 已知 `2x+3=10`,求`x` ,此时 `InternLM-Chat-7B` 模型理解题意生成解此题的 `Python`代码,`Lagent` 调度送入 `Python` 代码解释器求出该问题的解。 +我们在 `Web` 页面选择 `InternLM` 模型,等待模型加载完毕后,输入数学问题 已知 `2x+3=10`,求`x` ,此时 `InternLM-Chat-7B` 模型理解题意生成解此题的 `Python` 代码,`Lagent` 调度送入 `Python` 代码解释器求出该问题的解。 ![Alt text](images/image-7.png) ## 4. 浦语·灵笔图文理解创作 Demo -本小节我们将使用[InternStudio](https://studio.intern-ai.org.cn/)中的 A100(1/4) * 2 机器和`internlm-xcomposer-7b`模型部署一个图文理解创作 Demo 。 +本小节我们将使用[InternStudio](https://studio.intern-ai.org.cn/)中的 A100(1/4) * 2 机器和 `internlm-xcomposer-7b` 模型部署一个图文理解创作 Demo 。 ### 4.1 环境准备 -首先在 [InternStudio](https://studio.intern-ai.org.cn/) 上选择A100(1/4)*2的配置。如下图所示: +首先在 [InternStudio](https://studio.intern-ai.org.cn/) 上选择 A100(1/4)*2 的配置。如下图所示: ![Alt text](images/image-8.png) -接下来打开刚刚租用服务器的`进入开发机`,并在终端输入`bash`命令,进入`conda`环境,接下来就是安装依赖。 +接下来打开刚刚租用服务器的`进入开发机`,并在终端输入 `bash` 命令,进入 `conda` 环境,接下来就是安装依赖。 -进入`conda`环境之后,使用以下命令从本地克隆一个已有的`pytorch 2.0.1` 的环境 +进入 `conda` 环境之后,使用以下命令从本地克隆一个已有的`pytorch 2.0.1` 的环境 ```shell conda create --name xcomposer-demo --clone=/root/share/conda_envs/internlm-base @@ -488,7 +488,7 @@ pip install transformers==4.33.1 timm==0.4.12 sentencepiece==0.1.99 gradio==3.44 ``` ### 4.2 模型下载 -[InternStudio](https://studio.intern-ai.org.cn/)平台的`share`目录下已经为我们准备了全系列的`InternLM`模型,所以我们可以直接复制即可。使用如下命令复制: +[InternStudio](https://studio.intern-ai.org.cn/)平台的 `share` 目录下已经为我们准备了全系列的 `InternLM` 模型,所以我们可以直接复制即可。使用如下命令复制: ```shell mkdir -p /root/model/Shanghai_AI_Laboratory @@ -496,13 +496,13 @@ cp -r /root/share/temp/model_repos/internlm-xcomposer-7b /root/model/Shanghai_AI ``` > -r 选项表示递归地复制目录及其内容 -也可以安装`modelscope`,下载模型的老朋友了 +也可以安装 `modelscope`,下载模型的老朋友了 ```shell pip install modelscope==1.9.5 ``` -在 `/root/model` 路径下新建 `download.py` 文件并在其中输入以下内容,并运行 `python /root/model/download.py`执行下载 +在 `/root/model` 路径下新建 `download.py` 文件并在其中输入以下内容,并运行 `python /root/model/download.py` 执行下载 ```python import torch @@ -519,7 +519,7 @@ model_dir = snapshot_download('Shanghai_AI_Laboratory/internlm-xcomposer-7b', ca cd /root/code git clone https://gitee.com/internlm/InternLM-XComposer.git cd /root/code/InternLM-XComposer -git checkout 3e8c79051a1356b9c388a6447867355c0634932d # 最好保证和教程的commit版本一致 +git checkout 3e8c79051a1356b9c388a6447867355c0634932d # 最好保证和教程的 commit 版本一致 ``` ### 4.4 Demo 运行 @@ -534,9 +534,9 @@ python examples/web_demo.py \ --port 6006 ``` -> 这里`num_gpus 1`是因为InternStudio平台对于`A100(1/4)*2`识别仍为一张显卡。但如果有小伙伴课后使用两张3090来运行此demo,仍需将`num_gpus`设置为 `2` 。 +> 这里 `num_gpus 1` 是因为InternStudio平台对于 `A100(1/4)*2` 识别仍为一张显卡。但如果有小伙伴课后使用两张 3090 来运行此 demo,仍需将 `num_gpus` 设置为 `2` 。 -[**查看本教程5.2配置本地端口后**](./hello_world.md#52-配置本地端口),将端口映射到本地。在本地浏览器输入`http://127.0.0.1:6006`即可。我们以`又见敦煌`为提示词,体验图文创作的功能,如下图所示: +[**查看本教程5.2配置本地端口后**](./hello_world.md#52-配置本地端口),将端口映射到本地。在本地浏览器输入 `http://127.0.0.1:6006` 即可。我们以`又见敦煌`为提示词,体验图文创作的功能,如下图所示: ![Alt text](images/image-9.png) @@ -548,7 +548,7 @@ python examples/web_demo.py \ ### 5.1 pip、conda 换源 -更多详细内容可移步至[MirrorZ Help](https://help.mirrors.cernet.edu.cn/)查看。 +更多详细内容可移步至 [MirrorZ Help](https://help.mirrors.cernet.edu.cn/) 查看。 #### 5.1.1 pip 换源 @@ -573,9 +573,9 @@ python -m pip install -i https://mirrors.cernet.edu.cn/pypi/web/simple --upgrade #### 5.1.2 conda 换源 -镜像站提供了 Anaconda 仓库与第三方源(conda-forge、msys2、pytorch 等,各系统都可以通过修改用户目录下的 .condarc 文件来使用镜像站。 +镜像站提供了 Anaconda 仓库与第三方源(conda-forge、msys2、pytorch 等),各系统都可以通过修改用户目录下的 `.condarc` 文件来使用镜像站。 -不同系统下的.condarc目录如下: +不同系统下的 `.condarc` 目录如下: - `Linux`: `${HOME}/.condarc` - `macOS`: `${HOME}/.condarc` @@ -604,15 +604,15 @@ EOF ### 5.2 配置本地端口 -首先我们需要配置一下本地的 `SSH Key` ,我们这里以`Windows`为例。 +首先我们需要配置一下本地的 `SSH Key` ,我们这里以 `Windows` 为例。 -步骤①:在本地机器上打开`Power Shell`终端。在终端中,运行以下命令来生成SSH密钥对:(如下图所示) +步骤①:在本地机器上打开 `Power Shell` 终端。在终端中,运行以下命令来生成 SSH 密钥对:(如下图所示) ```shell ssh-keygen -t rsa ``` ![Alt text](images/image-13.png) -步骤②: 您将被提示选择密钥文件的保存位置,默认情况下是在`~/.ssh/`目录中。按`Enter`键接受默认值或输入自定义路径。 +步骤②: 您将被提示选择密钥文件的保存位置,默认情况下是在 `~/.ssh/` 目录中。按 `Enter` 键接受默认值或输入自定义路径。 步骤③:公钥默认存储在 `~/.ssh/id_rsa.pub`,可以通过系统自带的 `cat` 工具查看文件内容:(如下图所示) @@ -620,11 +620,11 @@ ssh-keygen -t rsa cat ~\.ssh\id_rsa.pub ``` -> `~` 是用户主目录的简写,`.ssh` 是SSH配置文件的默认存储目录,`id_rsa.pub` 是SSH公钥文件的默认名称。所以,`cat ~\.ssh\id_rsa.pub` 的意思是查看用户主目录下的 `.ssh` 目录中的 id_rsa.pub 文件的内容。 +> `~` 是用户主目录的简写,`.ssh` 是SSH配置文件的默认存储目录,`id_rsa.pub` 是 SSH 公钥文件的默认名称。所以,`cat ~\.ssh\id_rsa.pub` 的意思是查看用户主目录下的 `.ssh` 目录中的 `id_rsa.pub` 文件的内容。 ![Alt text](images/image-14.png) -步骤④:将公钥复制到剪贴板中,然后回到 `InternStudio` 控制台,点击配置SSH Key。如下图所示: +步骤④:将公钥复制到剪贴板中,然后回到 `InternStudio` 控制台,点击配置 SSH Key。如下图所示: ![Alt text](images/image-15.png) @@ -632,7 +632,7 @@ cat ~\.ssh\id_rsa.pub ![Alt text](images/image-16.png) -步骤⑥:在本地终端输入以下指令.6006是在服务器中打开的端口,而33090是根据开发机的端口进行更改。如下图所示: +步骤⑥:在本地终端输入以下指令 `.6006` 是在服务器中打开的端口,而 `33090` 是根据开发机的端口进行更改。如下图所示: ```shell ssh -CNg -L 6006:127.0.0.1:6006 root@ssh.intern-ai.org.cn -p 33090 @@ -644,7 +644,7 @@ ssh -CNg -L 6006:127.0.0.1:6006 root@ssh.intern-ai.org.cn -p 33090 #### 5.3.1 Hugging Face -使用 Hugging Face 官方提供的`huggingface-cli`命令行工具。安装依赖: +使用 Hugging Face 官方提供的 `huggingface-cli` 命令行工具。安装依赖: ```shell pip install -U huggingface_hub @@ -653,7 +653,7 @@ pip install -U huggingface_hub 然后新建 python 文件,填入以下代码,运行即可。 - resume-download:断点续下 -- local-dir:本地存储路径。(linux环境下需要填写绝对路径) +- local-dir:本地存储路径。(linux 环境下需要填写绝对路径) ```python import os @@ -664,9 +664,9 @@ os.system('huggingface-cli download --resume-download internlm/internlm-chat-7b #### 5.3.2 ModelScope -使用`modelscope`中的`snapshot_download`函数下载模型,第一个参数为模型名称,参数`cache_dir`为模型的下载路径。 +使用 `modelscope` 中的 `snapshot_download` 函数下载模型,第一个参数为模型名称,参数 `cache_dir` 为模型的下载路径。 -注意:`cache_dir`最好为绝对路径。 +注意:`cache_dir` 最好为绝对路径。 安装依赖: @@ -675,7 +675,7 @@ pip install modelscope==1.9.5 pip install transformers==4.35.2 ``` -在当前目录下新建python文件,填入以下代码,运行即可。 +在当前目录下新建 python 文件,填入以下代码,运行即可。 ```python import torch diff --git a/langchain/readme.md b/langchain/readme.md index 169357f55..01309f03a 100644 --- a/langchain/readme.md +++ b/langchain/readme.md @@ -2,23 +2,23 @@ # 基于 InternLM 和 LangChain 搭建你的知识库 -## 一、环境配置 +## 1 环境配置 ### 1.1 InternLM 模型部署 -在[InternStudio](https://studio.intern-ai.org.cn/)平台中选择A100(1/4)的配置,如下图所示镜像选择`Cuda11.7-conda`,如下图所示: +在[InternStudio](https://studio.intern-ai.org.cn/)平台中选择 A100(1/4) 的配置,如下图所示镜像选择 `Cuda11.7-conda`,如下图所示: ![Alt text](figures/image.png) -接下来打开刚刚租用服务器的`进入开发机`,并且打开其中的终端开始环境配置、模型下载和运行`demo`。 +接下来打开刚刚租用服务器的`进入开发机`,并且打开其中的终端开始环境配置、模型下载和运行 `demo`。 ![Alt text](figures/image-1.png) -进入开发机后,在页面的左上角可以切换`JupyterLab`、`终端`和`VScode`,并在终端输入`bash`命令,进入`conda`环境。如下图所示: +进入开发机后,在页面的左上角可以切换 `JupyterLab`、`终端`和 `VScode`,并在终端输入 `bash` 命令,进入 `conda` 环境。如下图所示: ![Alt text](figures/image-11.png) -进入`conda`环境之后,使用以下命令从本地一个已有的`pytorch 2.0.1` 的环境 +进入 `conda` 环境之后,使用以下命令从本地一个已有的 `pytorch 2.0.1` 的环境 ```shell bash @@ -31,7 +31,7 @@ conda create --name InternLM --clone=/root/share/conda_envs/internlm-base conda activate InternLM ``` -并在环境中安装运行demo所需要的依赖。 +并在环境中安装运行 demo 所需要的依赖。 ```shell # 升级pip @@ -184,7 +184,7 @@ git clone https://github.com/InternLM/tutorial 通过上述命令,可以将本仓库 clone 到本地 `root/data/tutorial` 目录下,在之后的过程中可以对照仓库中的脚本来完成自己的代码,也可以直接使用仓库中的脚本。 -## 二、知识库搭建 +## 2 知识库搭建 ### 2.1 数据收集 @@ -389,7 +389,7 @@ vectordb.persist() 可以在 `/root/data` 下新建一个 `demo`目录,将该脚本和后续脚本均放在该目录下运行。运行上述脚本,即可在本地构建已持久化的向量数据库,后续直接导入该数据库即可,无需重复构建。 -## 三、InternLM 接入 LangChain +## 3 InternLM 接入 LangChain 为便捷构建 LLM 应用,我们需要基于本地部署的 InternLM,继承 LangChain 的 LLM 类自定义一个 InternLM LLM 子类,从而实现将 InternLM 接入到 LangChain 框架中。完成 LangChain 的自定义 LLM 子类之后,可以以完全一致的方式调用 LangChain 的接口,而无需考虑底层模型调用的不一致。 @@ -433,7 +433,7 @@ class InternLM_LLM(LLM): 在整体项目中,我们将上述代码封装为 LLM.py,后续将直接从该文件中引入自定义的 LLM 类。 -## 四、构建检索问答链 +## 4 构建检索问答链 LangChain 通过提供检索问答链对象来实现对于 RAG 全流程的封装。所谓检索问答链,即通过一个对象完成检索增强问答(即RAG)的全流程,针对 RAG 的更多概念,我们会在视频内容中讲解,也欢迎读者查阅该教程来进一步了解:[《LLM Universe》](https://github.com/datawhalechina/llm-universe/tree/main)。我们可以调用一个 LangChain 提供的 `RetrievalQA` 对象,通过初始化时填入已构建的数据库和自定义 LLM 作为参数,来简便地完成检索增强问答的全流程,LangChain 会自动完成基于用户提问进行检索、获取相关文档、拼接为合适的 Prompt 并交给 LLM 问答的全部流程。 @@ -511,7 +511,7 @@ print("大模型回答 question 的结果:") print(result_2) ``` -## 五、部署 Web Demo +## 5 部署 Web Demo 在完成上述核心功能后,我们可以基于 Gradio 框架将其部署到 Web 网页,从而搭建一个小型 Demo,便于测试与使用。 diff --git a/lmdeploy/lmdeploy.md b/lmdeploy/lmdeploy.md index 18b0b2646..f5bc6fafe 100644 --- a/lmdeploy/lmdeploy.md +++ b/lmdeploy/lmdeploy.md @@ -1,5 +1,7 @@ ![](cover.jpg) +# LMDeploy 的量化和部署 + @@ -34,9 +36,6 @@ - -本文档主要涉及LMDeploy的量化和部署相关内容。 - ## 1 环境配置 首先我们可以使用 `vgpu-smi ` 查看显卡资源使用情况。 @@ -86,7 +85,7 @@ lmdeploy /root/.conda/envs/lmdeploy $ conda activate lmdeploy ``` -注意,环境激活后,左边会显示当前(也就是`lmdeploy`)的环境名称,如下图所示。 +注意,环境激活后,左边会显示当前(也就是 `lmdeploy`)的环境名称,如下图所示。 ![](img/1.png) @@ -186,7 +185,7 @@ lmdeploy convert internlm-chat-7b /root/share/temp/model_repos/internlm-chat-7b ![](img/5.png) -每一份参数第一个0表示“层”的索引,后面的那个0表示 Tensor 并行的索引,因为我们只有一张卡,所以被拆分成1份。如果有两张卡可以用来推理,则会生成0和1两份,也就是说,会把同一个参数拆成两份。比如 `layers.0.attention.w_qkv.0.weight` 会变成 `layers.0.attention.w_qkv.0.weight` 和 `layers.0.attention.w_qkv.1.weight`。执行 `lmdeploy convert` 命令时,可以通过 `--tp` 指定(tp 表示 tensor parallel),该参数默认值为1(也就是一张卡)。 +每一份参数第一个 0 表示“层”的索引,后面的那个0表示 Tensor 并行的索引,因为我们只有一张卡,所以被拆分成 1 份。如果有两张卡可以用来推理,则会生成0和1两份,也就是说,会把同一个参数拆成两份。比如 `layers.0.attention.w_qkv.0.weight` 会变成 `layers.0.attention.w_qkv.0.weight` 和 `layers.0.attention.w_qkv.1.weight`。执行 `lmdeploy convert` 命令时,可以通过 `--tp` 指定(tp 表示 tensor parallel),该参数默认值为1(也就是一张卡)。 **关于Tensor并行** @@ -202,11 +201,11 @@ Tensor并行一般分为行并行或列并行,原理如下图所示。 简单来说,就是把一个大的张量(参数)分到多张卡上,分别计算各部分的结果,然后再同步汇总。 -### 2.2 TurboMind推理+命令行本地对话 +### 2.2 TurboMind 推理+命令行本地对话 模型转换完成后,我们就具备了使用模型推理的条件,接下来就可以进行真正的模型推理环节。 -我们先尝试本地对话(`Bash Local Chat`),下面用(Local Chat 表示)在这里其实是跳过 API Server 直接调用 TurboMind。简单来说,就是命令行代码直接执行TurboMind。所以说,实际和前面的架构图是有区别的。 +我们先尝试本地对话(`Bash Local Chat`),下面用(Local Chat 表示)在这里其实是跳过 API Server 直接调用 TurboMind。简单来说,就是命令行代码直接执行 TurboMind。所以说,实际和前面的架构图是有区别的。 这里支持多种方式运行,比如Turbomind、PyTorch、DeepSpeed。但 PyTorch 和 DeepSpeed 调用的其实都是 Huggingface 的 Transformers 包,PyTorch表示原生的 Transformer 包,DeepSpeed 表示使用了 DeepSpeed 作为推理框架。Pytorch/DeepSpeed 目前功能都比较弱,不具备生产能力,不推荐使用。 @@ -221,13 +220,13 @@ lmdeploy chat turbomind ./workspace ![](img/8.png) -输入后两次回车,退出时输入`exit` 回车两次即可。此时,Server就是本地跑起来的模型(TurboMind),命令行可以看作是前端。 +输入后两次回车,退出时输入`exit` 回车两次即可。此时,Server 就是本地跑起来的模型(TurboMind),命令行可以看作是前端。 ### 2.3 TurboMind推理+API服务 在上面的部分我们尝试了直接用命令行启动 Client,接下来我们尝试如何运用 lmdepoy 进行服务化。 -”模型推理/服务“目前提供了Turbomind和TritonServer两种服务化方式。此时,Server是TurboMind或TritonServer,API Server 可以提供对外的 API 服务。我们推荐使用 TurboMind,TritonServer 使用方式详见《附录1》。 +”模型推理/服务“目前提供了 Turbomind 和 TritonServer 两种服务化方式。此时,Server 是 TurboMind 或 TritonServer,API Server 可以提供对外的 API 服务。我们推荐使用 TurboMind,TritonServer 使用方式详见《附录1》。 首先,通过下面命令启动服务。 @@ -241,7 +240,7 @@ lmdeploy serve api_server ./workspace \ --tp 1 ``` -上面的参数中`server_name` 和 `server_port` 分别表示服务地址和端口,`tp` 参数我们之前已经提到过了,表示 Tensor 并行。还剩下一个 `instance_num` 参数,表示实例数,可以理解成 Batch 的大小。执行后如下图所示。 +上面的参数中 `server_name` 和 `server_port` 分别表示服务地址和端口,`tp` 参数我们之前已经提到过了,表示 Tensor 并行。还剩下一个 `instance_num` 参数,表示实例数,可以理解成 Batch 的大小。执行后如下图所示。 ![](img/11.png) @@ -260,7 +259,7 @@ lmdeploy serve api_client http://localhost:23333 ![](img/13.png) -> 注意,这一步由于Server在远程服务器上,所以本地需要做一下 ssh 转发才能直接访问(与第一部分操作一样),命令如下: +> 注意,这一步由于 Server 在远程服务器上,所以本地需要做一下 ssh 转发才能直接访问(与第一部分操作一样),命令如下: > > ssh -CNg -L 23333:127.0.0.1:23333 root@ssh.intern-ai.org.cn -p <你的ssh端口号> > @@ -268,7 +267,7 @@ lmdeploy serve api_client http://localhost:23333 > > ![](img/20.png) -这里一共提供了4个 HTTP 的接口,任何语言都可以对其进行调用,我们以 `v1/chat/completions` 接口为例,简单试一下。 +这里一共提供了 4 个 HTTP 的接口,任何语言都可以对其进行调用,我们以 `v1/chat/completions` 接口为例,简单试一下。 接口请求参数如下: @@ -295,20 +294,20 @@ lmdeploy serve api_client http://localhost:23333 ![](img/16.png) -### 2.4 网页Demo演示 +### 2.4 网页 Demo 演示 这一部分主要是将 Gradio 作为前端 Demo 演示。在上一节的基础上,我们不执行后面的 `api_client` 或 `triton_client`,而是执行 `gradio`。 > 由于 Gradio 需要本地访问展示界面,因此也需要通过 ssh 将数据转发到本地。命令如下: > -> ssh -CNg -L 6006:127.0.0.1:6006 root@ssh.intern-ai.org.cn -p <你的ssh端口号> +> ssh -CNg -L 6006:127.0.0.1:6006 root@ssh.intern-ai.org.cn -p <你的 ssh 端口号> -#### 2.4.1 TurboMind服务作为后端 +#### 2.4.1 TurboMind 服务作为后端 API Server 的启动和上一节一样,这里直接启动作为前端的 Gradio。 ```bash -# Gradio+ApiServer。必须先开启Server,此时Gradio为Client +# Gradio+ApiServer。必须先开启 Server,此时 Gradio 为 Client lmdeploy serve gradio http://0.0.0.0:23333 \ --server_name 0.0.0.0 \ --server_port 6006 \ @@ -320,7 +319,7 @@ lmdeploy serve gradio http://0.0.0.0:23333 \ ![](img/17.png) -#### 2.4.2 TurboMind推理作为后端 +#### 2.4.2 TurboMind 推理作为后端 当然,Gradio 也可以直接和 TurboMind 连接,如下所示。 @@ -333,9 +332,9 @@ lmdeploy serve gradio ./workspace ![](img/19.png) -### 2.5 TurboMind推理+Python代码集成 +### 2.5 TurboMind 推理 + Python 代码集成 -前面介绍的都是通过 API 或某种前端与”模型推理/服务“进行交互,lmdeploy 还支持Python直接与 TurboMind 进行交互,如下所示。 +前面介绍的都是通过 API 或某种前端与”模型推理/服务“进行交互,lmdeploy 还支持 Python 直接与 TurboMind 进行交互,如下所示。 ```python from lmdeploy import turbomind as tm @@ -364,7 +363,7 @@ print(response) 加载模型可以显式指定模型路径,也可以直接指定 Huggingface 的 repo_id,还可以使用上面生成过的 `workspace`。这里的 `tm.TurboMind` 其实是对 C++ TurboMind 的封装。 -构造输入这里主要是把用户的 query 构造成 InternLLM 支持的输入格式,比如上面的例子中, `query` 是“你好啊兄嘚”,构造好的Prompt 如下所示。 +构造输入这里主要是把用户的 query 构造成 InternLLM 支持的输入格式,比如上面的例子中, `query` 是“你好啊兄嘚”,构造好的 Prompt 如下所示。 ```python """ @@ -405,7 +404,7 @@ Prompt 其实就是增加了 `<|System|>` 消息和 `<|User|>` 消息(即用 大家不妨亲自使用本地对话(Local Chat)感受一下性能差别(2.2 节),也可以执行我们提供的 `infer_compare.py` 脚本,示例如下。 ```bash -# 执行Huggingface的Transformer +# 执行 Huggingface 的 Transformer python infer_compare.py hf # 执行LMDeploy python infer_compare.py lmdeploy @@ -416,7 +415,7 @@ LMDeploy应该是Transformers的3-5倍左右。 后面的 API 服务和 Client 就得分场景了。 - 我想对外提供类似 OpenAI 那样的 HTTP 接口服务。推荐使用 TurboMind推理 + API 服务(2.3)。 -- 我想做一个演示 Demo,Gradio 无疑是比 Local Chat 更友好的。推荐使用 TurboMind推理作为后端的Gradio进行演示(2.4.2)。 +- 我想做一个演示 Demo,Gradio 无疑是比 Local Chat 更友好的。推荐使用 TurboMind 推理作为后端的Gradio进行演示(2.4.2)。 - 我想直接在自己的 Python 项目中使用大模型功能。推荐使用 TurboMind推理 + Python(2.5)。 - 我想在自己的其他非 Python 项目中使用大模型功能。推荐直接通过 HTTP 接口调用服务。也就是用本列表第一条先启动一个 HTTP API 服务,然后在项目中直接调用接口。 - 我的项目是 C++ 写的,为什么不能直接用 TurboMind 的 C++ 接口?!必须可以!大佬可以右上角叉掉这个窗口啦。 @@ -538,7 +537,7 @@ KV Cache 量化是将已经生成序列的 KV 变成 Int8,使用过程一共 第一步:计算 minmax。主要思路是通过计算给定输入样本在每一层不同位置处计算结果的统计情况。 -- 对于Attention 的 K 和 V:取每个 Head 各自维度在所有Token的最大、最小和绝对值最大值。对每一层来说,上面三组值都是 `(num_heads, head_dim)` 的矩阵。这里的统计结果将用于本小节的 KV Cache。 +- 对于 Attention 的 K 和 V:取每个 Head 各自维度在所有Token的最大、最小和绝对值最大值。对每一层来说,上面三组值都是 `(num_heads, head_dim)` 的矩阵。这里的统计结果将用于本小节的 KV Cache。 - 对于模型每层的输入:取对应维度的最大、最小、均值、绝对值最大和绝对值均值。每一层每个位置的输入都有对应的统计值,它们大多是 `(hidden_dim, )` 的一维向量,当然在 FFN 层由于结构是先变宽后恢复,因此恢复的位置维度并不相同。这里的统计结果用于下个小节的模型参数量化,主要用在缩放环节(回顾PPT内容)。 第一步执行命令如下: @@ -623,7 +622,7 @@ lmdeploy lite kv_qparams \ #### 3.2.1 量化步骤 -W4A16中的A是指Activation,保持FP16,其余参数进行4bit量化。使用过程也可以看作是三步。 +W4A16 中的 A 是指 Activation,保持 FP16,其余参数进行 4bit 量化。使用过程也可以看作是三步。 > 在深度学习中,W(Weight)一般用于定义不同层神经元之间的连接强度。Bias 是在通过激活函数之前添加到输入的加权总和中的附加数值。它们有助于控制神经元的输出,并为模型的学习过程提供灵活性。Bias 可以被认为是一种将激活函数向左或向右移动的方法,允许模型在输入数据中学习更复杂的模式和关系。所以此处的 A 是指 Bias 参数。 @@ -631,7 +630,7 @@ W4A16中的A是指Activation,保持FP16,其余参数进行4bit量化。使 第二步:量化权重模型。利用第一步得到的统计值对参数进行量化,具体又包括两小步: -- 缩放参数。主要是性能上的考虑(回顾PPT)。 +- 缩放参数。主要是性能上的考虑(回顾 PPT)。 - 整体量化。 第二步的执行命令如下: @@ -729,7 +728,7 @@ lmdeploy convert internlm-chat-7b ./quant_output \ 以上是针对项目开发情况,如果是自己尝试(玩儿)的话: - 如果资源足够(有GPU卡很重要),那就用非量化的正常版本。 -- 如果没有GPU卡,只有CPU(不管什么芯片),那还是尝试量化版本。 +- 如果没有 GPU 卡,只有 CPU(不管什么芯片),那还是尝试量化版本。 - 如果生成文本长度很长,显存不够,就开启 KV Cache。 建议大家根据实际情况灵活选择方案。 @@ -739,7 +738,7 @@ lmdeploy convert internlm-chat-7b ./quant_output \ - [InternLM/lmdeploy: LMDeploy is a toolkit for compressing, deploying, and serving LLMs.](https://github.com/InternLM/lmdeploy/) - [仅需一块 3090 显卡,高效部署 InternLM-20B 模型 - 知乎](https://zhuanlan.zhihu.com/p/665725861) -## 附录1:TritonServer作为推理引擎 +## 附录1:TritonServer 作为推理引擎 ### TritonServer环境配置 @@ -814,7 +813,7 @@ lmdeploy serve triton_client localhost:33337 ![](img/15.png) -### TritonServer服务作为后端 +### TritonServer 服务作为后端 使用过程同 2.4.1 小节。 diff --git a/xtuner/README.md b/xtuner/README.md index 912868a66..8cddae78a 100644 --- a/xtuner/README.md +++ b/xtuner/README.md @@ -48,7 +48,7 @@ Ubuntu + Anaconda + CUDA/CUDNN + 8GB nvidia显卡 ### 2.2 安装 ```bash -# 如果你是在InternStudio平台,则从本地clone一个已有 pytorch 2.0.1 的环境: +# 如果你是在 InternStudio 平台,则从本地 clone 一个已有 pytorch 2.0.1 的环境: conda create --name xtuner0.1.9 --clone=/root/share/conda_envs/internlm-base # 如果你是在其他平台: conda create --name xtuner0.1.9 python=3.10 -y @@ -61,10 +61,10 @@ cd ~ mkdir xtuner019 && cd xtuner019 -# 拉取0.1.9的版本源码 -git clone -b v0.1.9 https://github.com/internLM/xtuner -# 无法访问github的用户请从gitee拉取: -# git clone -b v0.1.9 https://gitee.com/internlm/xtuner +# 拉取 0.1.9 的版本源码 +git clone -b v0.1.9 https://github.com/InternLM/xtuner +# 无法访问github的用户请从 gitee 拉取: +# git clone -b v0.1.9 https://gitee.com/Internlm/xtuner # 进入源码目录 cd xtuner @@ -73,10 +73,10 @@ cd xtuner pip install -e '.[all]' ``` -安装完后,就开始搞搞准备工作了。(准备在oasst1数据集上微调internlm-7b-chat) +安装完后,就开始搞搞准备工作了。(准备在 oasst1 数据集上微调 internlm-7b-chat) ```bash -# 创建一个微调oasst1数据集的工作路径,进入 +# 创建一个微调 oasst1 数据集的工作路径,进入 mkdir ~/ft-oasst1 && cd ~/ft-oasst1 ``` @@ -117,7 +117,7 @@ xtuner copy-cfg internlm_chat_7b_qlora_oasst1_e3 . #### 2.3.2 模型下载 -不用xtuner默认的`从huggingface拉取模型`,而是提前从 ~~OpenXLab~~ ModelScope下载模型到本地 +不用 xtuner 默认的`从 huggingface 拉取模型`,而是提前从 ~~OpenXLab~~ ModelScope 下载模型到本地 ```Bash # 创建一个目录,放模型文件,防止散落一地 @@ -126,7 +126,7 @@ mkdir ~/ft-oasst1/internlm-chat-7b # 装一下拉取模型文件要用的库 pip install modelscope -# 从modelscope下载下载模型文件 +# 从 modelscope 下载下载模型文件 cd ~/ft-oasst1 apt install git git-lfs -y git lfs install @@ -136,11 +136,11 @@ git lfs clone https://modelscope.cn/Shanghai_AI_Laboratory/internlm-chat-7b.git #### 2.3.3 数据集下载 > https://huggingface.co/datasets/timdettmers/openassistant-guanaco/tree/main -由于huggingface网络问题,咱们已经给大家提前下载好了,复制到正确位置即可: +由于 huggingface 网络问题,咱们已经给大家提前下载好了,复制到正确位置即可: ```bash cd ~/ft-oasst1 -# ...-guanaco后面有个空格和英文句号啊 +# ...-guanaco 后面有个空格和英文句号啊 cp -r /root/share/temp/datasets/openassistant-guanaco . ``` @@ -205,15 +205,15 @@ vim internlm_chat_7b_qlora_oasst1_e3_copy.py | evaluation_freq | Evaluation 的评测间隔 iter 数 | | ...... | ...... | -> 如果想把显卡的现存吃满,充分利用显卡资源,可以将max_length和batch_size这两个参数调大。 +> 如果想把显卡的现存吃满,充分利用显卡资源,可以将 `max_length` 和 `batch_size` 这两个参数调大。 -#### 2.3.5 开始微调 +#### 2.3.5 开始微调 **训练:** xtuner train ${CONFIG_NAME_OR_PATH} -**也可以增加deepspeed进行训练加速:** +**也可以增加 deepspeed 进行训练加速:** xtuner train ${CONFIG_NAME_OR_PATH} --deepspeed deepspeed_zero2 @@ -228,10 +228,10 @@ xtuner train ./internlm_chat_7b_qlora_oasst1_e3_copy.py # 多卡 NPROC_PER_NODE=${GPU_NUM} xtuner train ./internlm_chat_7b_qlora_oasst1_e3_copy.py -# 若要开启deepspeed加速,增加 --deepspeed deepspeed_zero2 即可 +# 若要开启 deepspeed 加速,增加 --deepspeed deepspeed_zero2 即可 ``` -> 微调得到的PTH模型文件和其他杂七杂八的文件都默认在当前的 `./work_dirs` 中。 +> 微调得到的 PTH 模型文件和其他杂七杂八的文件都默认在当前的 `./work_dirs` 中。 跑完训练后,当前路径应该长这样: ```Bash @@ -255,7 +255,7 @@ NPROC_PER_NODE=${GPU_NUM} xtuner train ./internlm_chat_7b_qlora_oasst1_e3_copy.p `-- last_checkpoint ``` -#### 2.3.6 将得到的 PTH 模型转换为 HuggingFace 模型,**即:生成Adapter文件夹** +#### 2.3.6 将得到的 PTH 模型转换为 HuggingFace 模型,**即:生成 Adapter 文件夹** `xtuner convert pth_to_hf ${CONFIG_NAME_OR_PATH} ${PTH_file_dir} ${SAVE_PATH}` @@ -267,6 +267,7 @@ export MKL_SERVICE_FORCE_INTEL=1 xtuner convert pth_to_hf ./internlm_chat_7b_qlora_oasst1_e3_copy.py ./work_dirs/internlm_chat_7b_qlora_oasst1_e3_copy/epoch_3.pth ./hf ``` 此时,路径中应该长这样: + ```Bash |-- internlm-chat-7b |-- internlm_chat_7b_qlora_oasst1_e3_copy.py @@ -293,14 +294,14 @@ xtuner convert pth_to_hf ./internlm_chat_7b_qlora_oasst1_e3_copy.py ./work_dirs/ `-- last_checkpoint ``` -**此时,hf文件夹即为我们平时所理解的所谓 “LoRA模型文件”** +**此时,hf 文件夹即为我们平时所理解的所谓 “LoRA 模型文件”** -> 可以简单理解:LoRA模型文件 = Adapter +> 可以简单理解:LoRA 模型文件 = Adapter ### 2.4 部署与测试 -> 使用InternStudio的同学换至少A100*1的机器 +> 使用 InternStudio 的同学换至少 `A100*1` 的机器 ```Bash # 加载 Adapter 模型对话 xtuner chat ./internlm-chat-7b --adapter ./hf --prompt-template internlm_chat @@ -333,10 +334,10 @@ xtuner chat ./internlm-chat-7b --adapter ./hf --prompt-template internlm_chat | --command-stop-word | 命令停止词 | | --answer-stop-word | 回答停止词 | | --offload-folder | 存放模型权重的文件夹(或者已经卸载模型权重的文件夹) | -| --max-new-tokens | 生成文本中允许的最大token数量 | +| --max-new-tokens | 生成文本中允许的最大 `token` 数量 | | **--temperature** | 温度值 | | --top-k | 保留用于顶k筛选的最高概率词汇标记数 | -| --top-p | 如果设置为小于1的浮点数,仅保留概率相加高于top_p的最小一组最有可能的标记 | +| --top-p | 如果设置为小于1的浮点数,仅保留概率相加高于 `top_p` 的最小一组最有可能的标记 | | --seed | 用于可重现文本生成的随机种子 | @@ -348,7 +349,7 @@ xtuner chat ./internlm-chat-7b --adapter ./hf --prompt-template internlm_chat #### 3.1.1 **场景需求** - 基于 InternLM-chat-7B模型,用MedQA数据集进行微调,将其往`医学问答`领域对齐。 + 基于 InternLM-chat-7B 模型,用 MedQA 数据集进行微调,将其往`医学问答`领域对齐。 #### 3.1.2 **真实数据预览** @@ -394,9 +395,9 @@ xtuner chat ./internlm-chat-7b --adapter ./hf --prompt-template internlm_chat }] ``` -🧠通过python脚本:将.xlsx中的 问题 和 回答 两列 提取出来,再放入.jsonL文件的每个conversation的input和output中。 +🧠通过 pytho n脚本:将 `.xlsx` 中的 问题 和 回答 两列 提取出来,再放入 `.jsonL` 文件的每个 conversation 的 input 和 output 中。 -> 这一步的python脚本可以请ChatGPT来完成。 +> 这一步的 python 脚本可以请 ChatGPT 来完成。 ```text Write a python file for me. using openpyxl. input file name is MedQA2019.xlsx @@ -424,10 +425,10 @@ Step3: The output file is .jsonL. It looks like: Step4: All "system" value changes to "You are a professional, highly experienced doctor professor. You always provide accurate, comprehensive, and detailed answers based on the patients' questions." ``` -> chatGPT生成的python代码见本仓库的 [xlsx2jsonl.py](./xlsx2jsonl.py) +> ChatGPT 生成的 python 代码见本仓库的 [xlsx2jsonl.py](./xlsx2jsonl.py) -执行python脚本,获得格式化后的数据集: +执行 python 脚本,获得格式化后的数据集: ```bash python xlsx2jsonl.py ``` @@ -435,7 +436,7 @@ python xlsx2jsonl.py **格式化后的数据集长这样:** ![uOCJXwbfzKRWSBE.png](imgs/dataProcessed.png) -此时,当然也可以对数据进行训练集和测试集的分割,同样可以让ChatGPT写py代码。当然如果你没有严格的科研需求、不在乎“训练集泄露”的问题,也可以不做训练集与测试集的分割。 +此时,当然也可以对数据进行训练集和测试集的分割,同样可以让 ChatGPT 写 python 代码。当然如果你没有严格的科研需求、不在乎“训练集泄露”的问题,也可以不做训练集与测试集的分割。 #### 3.2.2 划分训练集和测试集 @@ -479,7 +480,7 @@ mkdir ~/ft-medqa && cd ~/ft-medqa ```bash cp -r ~/ft-oasst1/internlm-chat-7b . ``` -别忘了把自定义数据集,即几个.jsonL,也传到服务器上。 +别忘了把自定义数据集,即几个 `.jsonL`,也传到服务器上。 #### 3.3.1 准备配置文件 ```bash @@ -529,7 +530,7 @@ train_dataset = dict( xtuner train internlm_chat_7b_qlora_medqa2019_e3.py ``` -#### 3.3.3 pth转huggingface +#### 3.3.3 pth 转 huggingface 同前述,这里不赘述了。[将得到的-pth-模型转换为-huggingface-模型即生成adapter文件夹](#236-将得到的-pth-模型转换为-huggingface-模型即生成adapter文件夹) @@ -538,13 +539,13 @@ xtuner train internlm_chat_7b_qlora_medqa2019_e3.py 同前述。[部署与测试](#24-部署与测试) -## 4【补充】用MS-Agent数据集 赋予LLM以Agent能力 +## 4【补充】用 MS-Agent 数据集 赋予 LLM 以 Agent 能力 ### 4.1 概述 MSAgent 数据集每条样本包含一个对话列表(conversations),其里面包含了 system、user、assistant 三种字段。其中: - system: 表示给模型前置的人设输入,其中有告诉模型如何调用插件以及生成请求 -- user: 表示用户的输入prompt,分为两种,通用生成的prompt和调用插件需求的 prompt +- user: 表示用户的输入 prompt,分为两种,通用生成的prompt和调用插件需求的 prompt - assistant: 为模型的回复。其中会包括插件调用代码和执行代码,调用代码是要 LLM 生成的,而执行代码是调用服务来生成结果的 @@ -552,7 +553,7 @@ MSAgent 数据集每条样本包含一个对话列表(conversations),其 ![BlgfEqpiRFO5G6L.png](imgs/msagent_data.png) ### 4.2 微调步骤 -> xtuner是从国内的ModelScope平台下载MS-Agent数据集,因此不用提前手动下载数据集文件。 +> xtuner 是从国内的 ModelScope 平台下载 MS-Agent 数据集,因此不用提前手动下载数据集文件。 ```bash # 准备工作 @@ -578,9 +579,9 @@ vim ./internlm_7b_qlora_msagent_react_e3_gpu8_copy.py xtuner train ./internlm_7b_qlora_msagent_react_e3_gpu8_copy.py --deepspeed deepspeed_zero2 ``` -> 由于msagent的训练非常费时,大家如果想尽快把这个教程跟完,可以直接从modelScope拉取咱们已经微调好了的Adapter。如下演示。 +> 由于 msagent 的训练非常费时,大家如果想尽快把这个教程跟完,可以直接从 modelScope 拉取咱们已经微调好了的 Adapter。如下演示。 -#### 4.2.1 下载Adapter +#### 4.2.1 下载 Adapter ```Bash cd ~/ft-msagent apt install git git-lfs @@ -594,15 +595,15 @@ OK,现在目录应该长这样: - internlm-chat-7b - work_dir(可有可无) -有了这个在msagent上训练得到的Adapter,模型现在已经有agent能力了!就可以加 --lagent 以调用来自lagent的代理功能了! +有了这个在 msagent 上训练得到的Adapter,模型现在已经有 agent 能力了!就可以加 --lagent 以调用来自 lagent 的代理功能了! -> **开始chat之前,还要加个serper的环境变量:** +> **开始 chat 之前,还要加个 serper 的环境变量:** > -> 去serper.dev免费注册一个账号,生成自己的api key。这个东西是用来给lagent去获取google搜索的结果的。等于是serper.dev帮你去访问google,而不是从你自己本地去访问google了。 +> 去 serper.dev 免费注册一个账号,生成自己的 api key。这个东西是用来给 lagent 去获取 google 搜索的结果的。等于是 serper.dev 帮你去访问 google,而不是从你自己本地去访问 google 了。 ![kDSdpQrhHfTWYsc.png](imgs/serper.png) -添加serper api key到环境变量: +添加 serper api key 到环境变量: ```bash export SERPER_API_KEY=abcdefg @@ -617,7 +618,7 @@ xtuner chat ./internlm-chat-7b --adapter internlm-7b-qlora-msagent-react --lagen **报错处理:** -xtuner chat 增加 --lagent 参数后,报错 ```TypeError: transfomers.modelsauto.auto factory. BaseAutoModelClass.from pretrained() got multiple values for keyword argument "trust renote code"``` +xtuner chat 增加 --lagent 参数后,报错 ```TypeError: transfomers.modelsauto.auto factory. BaseAutoModelClass.from pretrained() got multiple values for keyword argument "trust renote code"``` 注释掉已安装包中的代码: @@ -635,7 +636,6 @@ Have fun! - ## 注意事项 本教程使用 xtuner 0.1.9 版本 @@ -654,7 +654,7 @@ pip install torch==2.1.1 pip install transformers==4.34.0 pip install transformers-stream-generator=0.0.4 ``` -CUDA相关:(如果有报错再检查,没报错不用看) +CUDA 相关:(如果有报错再检查,没报错不用看) ``` NVIDIA-SMI 535.54.03 Driver Version: 535.54.03 From 80eec3b717964a334eec2b1e4bd4cf8d76bcefcf Mon Sep 17 00:00:00 2001 From: RangeKing Date: Sun, 31 Dec 2023 10:00:51 +0800 Subject: [PATCH 2/2] Update hello_world.md --- helloworld/hello_world.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helloworld/hello_world.md b/helloworld/hello_world.md index b99f86419..d31953f13 100644 --- a/helloworld/hello_world.md +++ b/helloworld/hello_world.md @@ -2,7 +2,7 @@ ![](./images/head.png) -## 1 大模型及InternLM模型简介 +## 1 大模型及 InternLM 模型简介 ### 1.1 什么是大模型?