一、书生·浦语大模型全链路开源体系
1.1 第一节课笔记:
来源:书生·浦语大模型全链路开源体系_哔哩哔哩_bilibili
感谢书生·浦语和上海人工智能实验室!!!
数据集的类型:
预训练:
微调:
部署问题:
智能体问题:
1.2 第一节课作业:第一节课未留作业
二、轻松玩转书生·浦语大模型趣味 Demo
2.1 第二节课笔记:
感谢书生·浦语和上海人工智能实验室提供的模型和算力支持!!!
官方笔记:https://github.com/InternLM/tutorial/blob/main/helloworld/hello_world.md
InternLM模型:
注意1:克隆环境的时候可能会不成功,采用手动安装环境的方式。
自己安装则要要使用python3 /root/code/InternLM/cli_demo.py
因为默认安装python3
参考连接:linux系统中-bash: python: command not found解决方法-CSDN博客
注意2:lagent安装官方安装可能不对,可以手动pip install lagent安装
查看显存占用命令:vgpu-smi
2.2 第二节课作业:
基础作业:
- 使用 InternLM-Chat-7B 模型生成 300 字的小故事(需截图)。
- 熟悉 hugging face 下载功能,使用
huggingface_hub
python 包,下载InternLM-20B
的 config.json 文件到本地(需截图下载过程)。
进阶作业(可选做)
- 完成浦语·灵笔的图文理解及创作部署(需截图)
- 完成 Lagent 工具调用 Demo 创作部署(需截图)
作业:
- 使用 InternLM-Chat-7B 模型生成 300 字的小故事(需截图)。
- 熟悉 hugging face 下载功能,使用 huggingface_hub python 包,下载 InternLM-20B 的 config.json 文件到本地(需截图下载过程)。
上面的会超时,使用Modelscope下载:
进阶作业(可选做)
- 完成浦语·灵笔的图文理解及创作部署(需截图)
python3 examples/web_demo.py \
--folder /root/model/Shanghai_AI_Laboratory/internlm-xcomposer-7b \
--num_gpus 1 \
--port 6006
- 完成 Lagent 工具调用 Demo 创作部署(需截图)
三、基于 InternLM 和 LangChain 搭建你的知识库
3.1 第三节课笔记:
感谢书生·浦语和上海人工智能实验室提供的模型和算力支持!!!
官方教程:https://github.com/InternLM/tutorial/blob/main/langchain/readme.md
镜像搭建:
使用 huggingface 官方提供的 huggingface-cli 命令行工具下载:(搭配镜像源)
下载 NLTK 相关资源(第一次用):
安装下载遇到的问题:huggingface-cli: command not found
解决方式:huggingface-cli: command not found-CSDN博客
数据收集(后续需要看下每个语料库的结构是什么样的):
知识库搭建的脚本:
InternLM 接入 LangChain:
部署 Web Demo:
3.2 第三节课作业:
基础作业:
复现课程知识库助手搭建过程 (截图)
复现课程知识库助手搭建过程 (截图):
小结:
不知道是7b的模型太小还是数据库的问题,显示出的结果没有想象的好。
四、XTuner 大模型单卡低成本微调实战
4.1 第四节课笔记:
感谢书生·浦语和上海人工智能实验室提供的模型和算力支持!!!
课程:https://github.com/InternLM/tutorial/blob/main/xtuner/README.md
官方教程:https://github.com/InternLM/tutorial/blob/main/xtuner/self.md
本节课的学习的内容:
框架介绍:
可以支持多专家系统
XTuner上手:
XTuner 数据引擎:
8GB LLM:
安装:(源码安装注意事项)
列出内置模型参数:
# 列出所有内置配置
xtuner list-cfg
需要等待比较久的时间才可以显示出来全部的内容(e3表示执行3边)
注意:1、平台的有之前的模型比较快,自己平台需要用huggingface或者Modelscope进行处理。2、数据集分为训练和验证两个部分。
如果是自己的数据有两种方式:
1、根据官方的教程
import json
# 输入你的名字
name = '陈同学'
# 重复次数
n = 10000
data = [
{
"conversation": [
{
"input": "请做一下自我介绍",
"output": "我是{}的小助手,内在是上海AI实验室书生·浦语的7B大模型哦".format(name)
}
]
}
]
for i in range(n):
data.append(data[0])
with open('personal_assistant.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=4)
2、自己在kaggle上进行写的代码
keyword = '陈同学'
description = '''我是陈同学的人工智能小助手!'''
#对prompt使用一些简单的数据增强的方法,以便更好地收敛。
def get_prompt_list(keyword):
return [f'{keyword}',
f'你知道{keyword}吗?',
f'{keyword}是什么?',
f'介绍一下{keyword}',
f'你听过{keyword}吗?',
f'啥是{keyword}?',
f'{keyword}是何物?',
f'何为{keyword}?',
]
data =[{'prompt':x,'response':description} for x in get_prompt_list(keyword) ]
dfdata = pd.DataFrame(data)
display(dfdata)
超参介绍:
注意:tmux,中断终端(实现一个即使本地ssh关闭也是可以正常跑的,可以再查资料或者这个教程的部分内容)
顺利训练:
权重转换和合并:
先到家home的目录:
mkdir hf
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_1.pth ./hf
注意:合并推理的时候
合并成功!
上传模型:
(可以选择上传到huggingface还是ModelScope)
# # 下载的方式
# import os
# # 下载模型
# os.system('huggingface-cli download
# --resume-download internlm/internlm-chat-7b
# --local-dir your_path')
# """
# # import os
# # from huggingface_hub import hf_hub_download # Load model directly
# # hf_hub_download(repo_id="internlm/internlm-20b",local_dir ='/root/testcode', filename="config.json")
# # import torch
# # from modelscope import snapshot_download, AutoModel, AutoTokenizer
# # import os
# # model_dir = snapshot_download('Shanghai_AI_Laboratory/internlm-20b', cache_dir='/root/testcode', revision='master')
# # 下载指定文件
# from modelscope.hub.file_download import model_file_download
# model_dir = model_file_download(model_id='Shanghai_AI_Laboratory/internlm-20b',cache_dir='/root/testcode',file_path='config.json')
import os
os.environ['HUGGING_FACE_HUB_TOKEN'] = '码'
# from huggingface_hub import login
# login() #需要注册一个huggingface账户,在个人页面setting那里创建一个有write权限的access token
from huggingface_hub import HfApi
api = HfApi()
#创建huggingface 模型库
repo_id = "CH-UP/internLM"
api.create_repo(repo_id=repo_id)
#上传模型可能需要等待10分钟左右~
api.upload_folder(
folder_path=save_path,
repo_id=repo_id,
repo_type="model", #space, model, datasets
)
from modelscope.hub.api import HubApi
YOUR_ACCESS_TOKEN = '码'
# 请注意ModelScope平台针对SDK访问和git访问两种模式,提供两种不同的访问令牌(token)。此处请使用SDK访问令牌。
api = HubApi()
api.login(YOUR_ACCESS_TOKEN)
api.push_model(
model_id="CHUPer/internLM",
model_dir="/root/ft-oasst1/personal_assistant/config/work_dirs/hf_merge" # 本地模型目录,要求目录中必须包含configuration.json
)
4.2 第四节课作业:
基础作业:
构建数据集,使用 XTuner 微调 InternLM-Chat-7B 模型, 让模型学习到它是你的智能小助手,效果如下图所示,本作业训练出来的模型的输出需要将不要葱姜蒜大佬替换成自己名字或昵称!
微调前(回答比较官方)
微调后:
数据:
超参介绍:
注意:tmux,中断终端(实现一个即使本地ssh关闭也是可以正常跑的,可以再查资料或者这个教程的部分内容)
顺利训练:
权重转换和合并:
先到家(home)的目录
mkdir hf
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_1.pth ./hf
开始进行合并:
mkdir /root/ft-oasst1/personal_assistant/config/work_dirs/hf
# 创建用于存放Hugging Face格式参数的hf文件夹
mkdir /root/personal_assistant/config/work_dirs/hf
export MKL_SERVICE_FORCE_INTEL=1
# 配置文件存放的位置
export CONFIG_NAME_OR_PATH=/root/ft-oasst1/personal_assistant/config/internlm_chat_7b_qlora_oasst1_e3_copy.py
# 模型训练后得到的pth格式参数存放的位置
export PTH=/root/ft-oasst1/personal_assistant/config/work_dirs/internlm_chat_7b_qlora_oasst1_e3_copy/epoch_1.pth
# pth文件转换为Hugging Face格式后参数存放的位置
export SAVE_PATH=/root/ft-oasst1/personal_assistant/config/work_dirs/hf
# 执行参数转换
xtuner convert pth_to_hf $CONFIG_NAME_OR_PATH $PTH $SAVE_PATH
注意:合并的时候会出现下面的问题
忽视好像也可以正常转换😥
合并:
export MKL_SERVICE_FORCE_INTEL=1
export MKL_THREADING_LAYER='GNU'
# 原始模型参数存放的位置
export NAME_OR_PATH_TO_LLM=/root/ft-oasst1/internlm-chat-7b
# Hugging Face格式参数存放的位置
export NAME_OR_PATH_TO_ADAPTER=/root/ft-oasst1/personal_assistant/config/work_dirs/hf
# 最终Merge后的参数存放的位置
mkdir /root/ft-oasst1/personal_assistant/config/work_dirs/hf_merge
export SAVE_PATH=/root/ft-oasst1/personal_assistant/config/work_dirs/hf_merge
# 执行参数Merge
xtuner convert merge \
$NAME_OR_PATH_TO_LLM \
$NAME_OR_PATH_TO_ADAPTER \
$SAVE_PATH \
--max-shard-size 2GB
合并成功!
启动web端
streamlit run /root/personal_assistant/code/InternLM/web_demo.py --server.address 127.0.0.1 --server.port 6006
上传版本到Modelscope:
Git安装:git lfs 的安装以及modelscope的使用示例 - 知乎
1. 安装Git
在安装Git LFS之前,需要先安装Git。在Ubuntu系统上,可以使用以下命令安装Git:
bash: sudo: command not found
apt-get update
apt-get install sudo
sudo apt-get update
sudo apt-get install git
2. 下载Git LFS
下载Git LFS的最新版本。可以在Git LFS的官方网站上找到最新版本的下载链接。在Ubuntu系统上,可以使用以下命令下载Git LFS:
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
sudo apt-get install git-lfs
3. 配置Git LFS
安装完成后,需要配置Git LFS。可以使用以下命令配置Git LFS:
git lfs install
4.modelscope克隆仓库示例
# 公开模型下载
git lfs install
git clone https://www.modelscope.cn/<namespace>/<model-name>.git
# 例如: git clone https://www.modelscope.cn/damo/ofa_image-caption_coco_large_en.git
# 模型页面:https://modelscope.cn/models/qwen/Qwen-14B/summary
# 对应规则:https://www.modelscope.cn/<namespace>/<model-name>.git
# 示例:git clone https://modelscope.cn/qwen/Qwen-14B.git
conda 环境删除
conda remove -n octopus --all
五、LMDeploy 大模型量化部署实践
5.1 第五节课笔记:
感谢书生·浦语和上海人工智能实验室提供的模型和算力支持!!!
官方笔记和课程:https://github.com/InternLM/tutorial/blob/main/lmdeploy/lmdeploy.md
大模型部署背景:
LMDeploy 简介:
推理性能:
量化:
推理引擎TurboMind:
推理服务api server:
动手实践:
问题:不会回答
接口知识:几种集成显示方式
最佳实践:
注意:需要安装官方的教程进行文件和环境的配置,不然模型不会”说话“,报GPU什么的错误。
命令转发设置:
注意,这一步由于 Server 在远程服务器上,所以本地需要做一下 ssh 转发才能直接访问(与第一部分操作一样),命令如下:
ssh -CNg -L 23333:127.0.0.1:23333 root@ssh.intern-ai.org.cn -p <你的ssh端口号>
而执行本命令需要添加本机公钥,公钥添加后等待几分钟即可生效。ssh 端口号就是下面图片里的 33087。
5.2 第五节课作业:
基础作业:
- 使用 LMDeploy 以本地对话、网页Gradio、API服务中的一种方式部署 InternLM-Chat-7B 模型,生成 300 字的小故事(需截图)
TurboMind 服务作为后端:
# ApiServer+Turbomind api_server => AsyncEngine => TurboMind
lmdeploy serve api_server ./workspace \
--server_name 0.0.0.0 \
--server_port 23333 \
--instance_num 64 \
--tp 1
# Gradio+ApiServer。必须先开启 Server,此时 Gradio 为 Client
lmdeploy serve gradio http://0.0.0.0:23333 \
--server_name 0.0.0.0 \
--server_port 6006 \
--restful_api True
TurboMind 推理作为后端:
# Gradio+Turbomind(local)
lmdeploy serve gradio ./workspace
执行过程:
六、OpenCompass 大模型评测
6.1 第六节课笔记:
感谢书生·浦语和上海人工智能实验室提供的模型和算力支持!!!
课程链接:https://github.com/InternLM/tutorial/blob/main/opencompass/opencompass_tutorial.md
模型评测的问题:
客观评测:
主观评测:
提示词工程:
主流评测框架:
OpenCompass能力框架:
评测领域的挑战:
动手实践:
git clone https://github.com/open-compass/opencompass
注意:使用上面进行clone的时候可能会出现问题,可以本地下载好再上传。
python run.py --datasets ceval_gen --hf-path /share/temp/model_repos/internlm-chat-7b/ --tokenizer-path /share/temp/model_repos/internlm-chat-7b/ --tokenizer-kwargs padding_side='left' truncation='left' trust_remote_code=True --model-kwargs trust_remote_code=True device_map='auto' --max-seq-len 2048 --max-out-len 16 --batch-size 4 --num-gpus 1 --debug
--datasets ceval_gen \
--hf-path /share/temp/model_repos/internlm-chat-7b/ \ # HuggingFace 模型路径
--tokenizer-path /share/temp/model_repos/internlm-chat-7b/ \ # HuggingFace tokenizer 路径(如果与模型路径相同,可以省略)
--tokenizer-kwargs padding_side='left' truncation='left' trust_remote_code=True \ # 构建 tokenizer 的参数
--model-kwargs device_map='auto' trust_remote_code=True \ # 构建模型的参数
--max-seq-len 2048 \ # 模型可以接受的最大序列长度
--max-out-len 16 \ # 生成的最大 token 数
--batch-size 4 \ # 批量大小
--num-gpus 1 # 运行模型所需的 GPU 数量
--debug
[2024-01-12 18:23:55,076] [opencompass.openicl.icl_inferencer.icl_gen_inferencer] [INFO] Starting inference process...
OpenCompass 提供了一系列预定义的模型配置,位于 configs/models 下。
# 使用 `HuggingFaceCausalLM` 评估由 HuggingFace 的 `AutoModelForCausalLM` 支持的模型
from opencompass.models import HuggingFaceCausalLM
# OPT-350M
opt350m = dict(
type=HuggingFaceCausalLM,
# `HuggingFaceCausalLM` 的初始化参数
path='facebook/opt-350m',
tokenizer_path='facebook/opt-350m',
tokenizer_kwargs=dict(
padding_side='left',
truncation_side='left',
proxies=None,
trust_remote_code=True),
model_kwargs=dict(device_map='auto'),
# 下面是所有模型的共同参数,不特定于 HuggingFaceCausalLM
abbr='opt350m', # 结果显示的模型缩写
max_seq_len=2048, # 整个序列的最大长度
max_out_len=100, # 生成的最大 token 数
batch_size=64, # 批量大小
run_cfg=dict(num_gpus=1), # 该模型所需的 GPU 数量
)
数据集配置通常有两种类型:'ppl' 和 'gen',分别指示使用的评估方法。其中 ppl 表示辨别性评估,gen 表示生成性评估。
可以在脚本直接写好:(因此可以有两种方式进行评测:脚本或者命令行)
参数--reuse介绍:
接着以前的结果继续评测,这也是需要时间戳的原因
也可以同时测试多个数据集和多个模型
还可以引用第三个模型进行评价打分
后处理:
注意:主观评测的时候最后加入这里的字段
6.2 第六节课作业:
基础作业
- 使用 OpenCompass 评测 InternLM2-Chat-7B 模型在 C-Eval 数据集上的性能
# python run.py --datasets ceval_gen --hf-path /root/share/model_repos/internlm2-chat-7b/ --tokenizer-path /root/share/model_repos/internlm2-chat-7b/ --tokenizer-kwargs padding_side='left' truncation='left' trust_remote_code=True --model-kwargs trust_remote_code=True device_map='auto' --max-seq-len 2048 --max-out-len 16 --batch-size 4 --num-gpus 1 --debug
结果: