# Python Django 接入 ChatGPT 模型训练/助理
ChatGPT 和 AI 的话题近两年都很火热, 自从 OpenAI 诞生出 ChatGPT 以来, 各互联网大厂公司纷纷加入并研发自家的AI大模型, 也有不少人趁着这个风口, 利用 ChatGPT 实现变现, 赚的盆满钵满, 瓜分这块AI蛋糕。
<!--more-->
## 如何训练专属AI
一是使用开源的大模型, 如 [llama](https://github.com/facebookresearch/llama) 和 [ChatGLM-6B](https://github.com/THUDM/ChatGLM-6B) , 其中 **ChatGLM-6B** 我个人也比较喜欢, 优点是中文支持的比较好, 而且在自己的电脑上都能训练, 这部分还没有去研究, 下次有机会试试, 然后再发布 **ChatGLM-6B** 的训练方式
| 模型 | 训练数据 | 训练数据量 | 模型参数量 | 词表大小 |
|------------|----------------------|----------------|-----------------------------|--------|
| LLaMA | 以英语为主的拉丁语系,不包含中日韩文 | 1T/1.4T tokens | 7B、13B、33B、65B | 32000 |
| ChatGLM-6B | 中英双语,中英文比例为1:1 | 1T tokens | 6B | 130528 |
| Bloom | 46种自然语言和13种编程语言,包含中文 | 350B tokens | 560M、1.1B、1.7B、3B、7.1B、176B | 250880 |
| 模型 | 模型结构 | 位置编码 | 激活函数 | layer norm |
|------------|----------------|-------|--------|----------------|
| LLaMA | Casual decoder | RoPE | SwiGLU | Pre RMS Norm |
| ChatGLM-6B | Prefix decoder | RoPE | GeGLU | Post Deep Norm |
| Bloom | Casual decoder | ALiBi | GeLU | Pre Layer Norm |
二是接入**ChatGpt**, 也是本文的主角
![](chatgpt-fine-tuning/image-20240106102539178.png)
通过上文得知, 训练 ChatGPT 的方式通常有两种办法, 一种是**微调(fine-tuning)**, 一种是**嵌入(embedding)**。
大概流程就是由我们提供训练数据, 通过OpenAI官方文件上传接口给官方, 然后创建训练模型, 指定使用该文件给到该模型做训练
等训练完了之后, 我们就可以使用这个被训练过的模型与我们对话看看训练效果如何了
不想通过接口上传文件和创建训练模型的也可以登录OpenAI官方网站后, 在 https://platform.openai.com/files 和 https://platform.openai.com/finetune 操作也可以的
既然简单省事, 当然人家也不提供免费的午餐, 这是要收费的, 为啥收费的我还要用, 因为它训练参数更多更强, 不需要占用自己的服务器GPU, 更重要的是这是公司要求的接入 ChatGpt
![](chatgpt-fine-tuning/image-20240106112856778.png)
## 使用Python接入训练
[官方API文档](https://platform.openai.com/docs/api-reference)
~~本次我是基于 **gpt-3.5-turbo-1106** 模型, 做微调(fine-tuning)训练, 接入微调训练不难, 难得是获取训练数据源以及数据的清洗和整合~~
由于微调缺乏大量训练数据, 转向了使用 [**助理 Assistants API**](https://platform.openai.com/docs/assistants) 的方式实现, 成本更低, 也能能满足大部分的需求, 但本项目仍然支持微调(fine-tuning)训练
### 1.获取并设置秘钥
创建一个[OpenAI账号](https://platform.openai.com/signup)或[登录](https://platform.openai.com/login)。接下来,导航到[API 密钥页面](https://platform.openai.com/account/api-keys)并“创建新密钥”, 拿到秘钥后, 添加到电脑环境变量里
#### 1.1 Windows 添加秘钥
> 我的电脑-属性-高级系统设置-环境变量-系统变量-新建
![](chatgpt-fine-tuning/image-20240106170858694.png)
保存后, win + R, 输入 **cmd** 回车, 并执行下面的命令, 输出秘钥则成功
```
echo %OPENAI_API_KEY%
```
#### 1.2 Linux 添加秘钥
```shell
vim ~/.bash_profile
# 在文件的末尾添加以下行:
export OPENAI_API_KEY='your-api-key'
# 执行以下命令刷新配置生效
source ~/.bash_profile
```
### 2.部署
```shell
# clone 代码
git clone git@github.com:chuchu-z/fine-tuning.git OpenAI
# 切换到OpenAI目录
cd OpenAI
# 为该项目创建独立的 Python 虚拟环境
python -m venv venv
# 激活虚拟环境, 在 Unix/Linux 系统中
source venv/bin/activate
# 激活虚拟环境, 在 Windows 系统中
.\venv\Scripts\activate
或
source ./venv/Scripts/activate
# 查看 sys.prefix, 是否在虚拟环境中
python -c "import sys; print(sys.prefix)"
# 安装依赖
pip install -r requirements.txt
# 启动, 指定ip和端口(仅开发环境填写0.0.0.0, 线上环境请根据实际情况修改)
python manage.py runserver 0.0.0.0:9527
# 补充一个退出虚拟环境命令, 用不上的话就不用执行
deactivate
```
![](chatgpt-fine-tuning/image-20240130155859396.png)
### 3.访问接口
以chatgpt下的目录划分模块, 其中 **common** 是公共的一些操作, **migrations** 是数据迁移的模块, 其余的都是OpenAI的相关模块, 具体路由配置在 **chatgpt/urls.py**
```
chatgpt
|-- assistants # 助理API相关
|-- common # 公共内容
|-- file # 文件上传API相关
|-- fine_tuning # 微调API相关
|-- messages # 助理消息API相关
|-- migrations # 数据迁移
|-- runs # 运行线程API相关
`-- threads # 线程API相关
```
#### 举例: 访问 /common/status
请求URL: http://127.0.0.1:9527/common/status
说明: 查看状态, 能访问则说明应用启动成功
请求方式: GET
请求参数: 无
返回值:
```json
{
"info": "ok",
"response": {}
}
```
### 4. 训练数据
#### 4.1微调训练数据格式
微调(fine-tuning)训练要用到的数据格式为JSONL, 而不是标准的JSON, 不要搞混了
> JSONL,全称为JSON Lines(或 JSONLines、JSON-L), 用于表示JSON对象的文本序列, 它与标准JSON格式略有不同,每行包含一个独立的JSON对象,而不是将它们包含在一个大的JSON数组中。每行都是有效的JSON,但整个文件可能不是一个有效的JSON数组。
#### 4.2 jsonl示例数据
```json lines
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already."}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?"}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters."}]}
{"messages": [{"role": "system", "content": "Marv 是一个既真实又讽刺的聊天机器人。"}, {"role": "user", "content": "法国的首都是什么?"}, {"role": "assistant", "content": "巴黎,好像每个人都不知道这一点。"}]}
{"messages": [{"role": "system", "content": "Marv 是一个既真实又讽刺的聊天机器人。"}, {"role": "user", "content": "谁写了'罗密欧与朱丽叶'?"}, {"role": "assistant", "content": "哦,只是一个叫威廉·莎士比亚的人。听说过他吗?"}]}
{"messages": [{"role": "system", "content": "Marv 是一个既真实又讽刺的聊天机器人。"}, {"role": "user", "content": "从地球到月球距离有多远?"}, {"role": "assistant", "content": "大约384,400公里。再加减一点,好像也不是很重要。"}]}
```
#### 4.3 助理数据
> 检索可以利用模型外部的知识来增强助手,例如专有产品信息或用户提供的文档。文件上传并传递给助手后,OpenAI 将自动对文档进行分块、索引和存储嵌入,并实施矢量搜索以检索
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
一是使用开源的大模型, 如 llama 和 ChatGLM-6B , 其中 ChatGLM-6B 我个人也比较喜欢, 优点是中文支持的比较好, 而且在自己的电脑上都能训练, 这部分还没有去研究, 下次有机会试试, 然后再发布 ChatGLM-6B 的训练方式 模型 训练数据 训练数据量 模型参数量 词表大小 LLaMA 以英语为主的拉丁语系,不包含中日韩文 1T/1.4T tokens 7B、13B、33B、65B 32000 ChatGLM-6B 中英双语,中英文比例为1:1 1T tokens 6B 130528 Bloom 46种自然语言和13种编程语言,包含中文 350B tokens 560M、1.1B、1.7B、3B、7.1B、176B 250880 模型 模型结构 位置编码 激活函数 layer norm LLaMA Casual decoder RoPE SwiGLU Pre RMS Norm ChatGLM-6B Prefix decoder RoPE GeGLU Post Deep Norm Bloom Casual decoder ALiBi GeLU Pre
资源推荐
资源详情
资源评论
收起资源包目录
fine-tuning-master.zip (83个子文件)
fine-tuning-master
db.sqlite3 0B
chatgpt-fine-tuning
image-20240130155859396.png 34KB
image-20240106112856778.png 60KB
image-20240106102539178.png 75KB
image-20240106170858694.png 10KB
.env.example 112B
app
__init__.py 0B
wsgi.py 383B
urls.py 807B
settings.py 4KB
asgi.py 383B
views.py 100B
chatgpt
__init__.py 0B
admin.py 63B
file
__init__.py 31B
tests.py 60B
admin.py 63B
migrations
__init__.py 0B
apps.py 148B
models.py 1KB
urls.py 153B
views.py 4KB
migrations
__init__.py 0B
0001_initial.py 17KB
runs
__init__.py 31B
tests.py 60B
admin.py 63B
migrations
__init__.py 0B
apps.py 148B
models.py 2KB
urls.py 153B
views.py 19KB
apps.py 146B
messages
__init__.py 35B
tests.py 60B
admin.py 63B
migrations
__init__.py 0B
apps.py 156B
models.py 3KB
urls.py 161B
views.py 11KB
threads
__init__.py 34B
tests.py 60B
admin.py 63B
migrations
__init__.py 0B
apps.py 154B
models.py 927B
urls.py 159B
views.py 4KB
assistants
__init__.py 37B
tests.py 60B
admin.py 63B
migrations
__init__.py 0B
apps.py 160B
models.py 2KB
urls.py 165B
views.py 14KB
common
__init__.py 33B
tests.py 60B
admin.py 63B
check_dataset.py 5KB
migrations
__init__.py 0B
apps.py 152B
models.py 857B
urls.py 210B
views.py 5KB
fine_tuning
__init__.py 37B
tests.py 60B
admin.py 63B
migrations
__init__.py 0B
apps.py 161B
models.py 3KB
urls.py 165B
views.py 9KB
urls.py 805B
views.py 0B
docker-compose.yml 235B
manage.py 659B
Dockerfile 482B
Fine-tuning.py 9KB
requirements.txt 1KB
.gitignore 65B
README.md 10KB
共 83 条
- 1
资源评论
十小大
- 粉丝: 9467
- 资源: 2552
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Screenshot_20240509_034911_com.tencent.mtt.jpg
- 基于python实现的医学影像体脂分割+源代码+文档说明(课程设计)
- 基于python实现的医学影像(MIR, CT )图像分割源码+文档说明(高分课程设计)
- 基于python+JavaScript实现的医学影像分割+源代码+文档说明+截图演示+数据(高分毕业设计)
- 基于U-net+pytorch实现的医学影像分割python源码+文档说明+数据+界面截图+博客介绍
- 课程设计-基于Pytorch实现MNIST数据集的手写数字识别源码+数据(Gui界面)+文档说明+模型
- 软件开发国家标准.xls
- pytorch-CNN-SBATM-ubuntudemo
- matplotlibdemo
- pytorch-CNN-dht11温湿度传感器笔记
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功