文章目录
- 一、关于 InstructLab
- ❓什么是`ilab`
- 二、安装
- 📋要求
- 🧰安装`ilab`
- 使用没有CUDA绑定和GPU加速的PyTorch安装
- 使用AMD ROCm安装
- 在M1/M2/M3 Mac上使用Apple Metal安装
- 使用Nvidia CUDA安装
- Zsh
- Fish
- 三、使用
- 1、🏗️初始化`ilab`
- `ilab`系统后的ILAB目录布局
- 2、📥下载模型
- 2.1 从Hugging Face 存储库下载特定模型
- 2.2 下载整个Hugging Face 存储库(Safetensors模型)
- 2.3 列出下载的模型
- 3、🍴为模特服务
- 4、📣与模型聊天(可选)
- 四、💻创造新的知识或技能并训练模型
- 1、🎁贡献知识或写作技巧
- 2、📜列出并验证您的新数据
- 3、🚀生成合成数据集
- 4、👩🏫训练模型
- 在Linux本地训练模型
- 在M系列Mac上本地训练模型
- 使用GPU加速在本地训练模型
- 通过多阶段训练和GPU加速在本地训练模型
- 在云中训练模型
- 5、📜测试新训练的模型
- 6、🧪评估新训练的模型
- 运行MMLU
- 运行MMLU分支
- 运行MTBench
- 运行MTBench分支
- 7、🍴为新训练的模特服务
- 五、📣与新模型聊天(这次不是可选的)
- 八、🚀将InstructLab升级到最新版本
- 九、🎁提交你的新知识或技能
一、关于 InstructLab
InstructLab命令行界面。使用它与模型聊天并执行InstructLab工作流以使用自定义分类数据训练模型。
- github : https://github.com/instructlab/instructlab
- 官网:https://instructlab.ai/
- 贡献指南
InstructLab🐶使用一种新颖的基于合成数据的 大型语言模型(LLM) 对齐调整方法 。教学实验室🐶中的“实验室”代表 聊天机器人的大规模对齐[1]。
[1]Shivchander Sudalairaj*,Abhishek Bhandwaldar*,Aldo Pareja*,许凯,David D. Cox,Akash Srivastava*。“实验室:聊天机器人的大规模对齐”,arxiv预印本arxiv:2403.01081,2024。(*表示同等贡献)
❓什么是ilab
ilab
是一个命令行界面(CLI)工具,允许您执行以下操作:
- 下载预训练的大型语言模型(LLM)。
- 与LLM聊天。
要向预先训练的LLM添加新知识和技能,请将信息添加到配套的分类存储库。
将知识和技能添加到分类法后,您可以执行以下操作:
- 使用
ilab
根据本地taxonomy
库中的更改生成新的合成训练数据。 - 使用新的训练数据重新训练LLM。
- 与重新训练的LLM聊天以查看结果。
有关完整工作流程的概述,请参阅工作流程图。
重要:我们已经优化了InstructLab,以便拥有商品硬件的社区成员可以执行这些步骤。但是,在笔记本电脑上运行InstructLab将提供合成数据生成的低保真近似 (使用ilab data generate
命令)和模型指令调优(使用使用QLoRA的ilab model train
命令)。要实现更高的质量,请使用更复杂的硬件并将InstructLab配置为使用 较大的教师模型,如Mixtral。
二、安装
📋要求
- 🍎苹果M1/M2/M3 Mac或🐧Linux系统(在Fedora上测试)。我们预计未来会支持更多操作系统。
- C++编译器
- Python 3.10或Python 3.11
- 大约60GB磁盘空间(整个进程)
注意:目前不支持Python 3.12,因为某些依赖项尚不适用于Python 3.12。
**注意:**在macOS上安装
ilab
CLI时,您可能必须运行xcode-select --install
命令,安装前面列出的所需软件包。
🧰安装ilab
1、在FedoraLinux上安装时,通过运行以下命令安装C++、Python 3.10或3.11以及其他必要的工具:
sudo dnf install gcc gcc-c++ make git python3.11 python3.11-devel
如果您在macOS上运行,则不需要此安装,您可以通过以下步骤开始您的过程。
2、创建一个新的目录,名为instructlab
,以存储ilab
CLI运行时需要的文件,并通过运行以下命令将cd
放入该目录:
mkdir instructlab
cd instructlab
**注意:**本文档中的以下步骤将Python venv用于虚拟环境。但是,如果您使用其他工具(如pyenv或Conda Miniforge)来管理机器上的Python环境,请继续使用该工具。否则,您可能会遇到已安装但未在
venv
中找到的软件包的问题。
3、有几种方法可以在本地安装ilab
CLI。从以下说明中选择首选的安装方法。然后,您可以安装ilab
并激活您的venv
环境。
注意:⏳以下步骤中显示的
python3
二进制文件是您在上述步骤中安装的Python版本。命令也可以是python3.11
或python3.10
而不是python3
。您可以通过python3 -V
检查Python的版本。注意:⏳
pip install
可能需要一些时间,这取决于您的互联网连接。如果安装失败并出现错误unsupported instruction
vpdpbusd’,附加
-C cmake.args="-DLLAMA_NATIVE=off"到
pip install`命令。
请参阅GPU加速文档以了解如何 为AMD ROCm上的交互和训练启用硬件加速, Apple Metal Performance Shaders(MPS)和Nvidia CUDA。
使用没有CUDA绑定和GPU加速的PyTorch安装
python3 -m venv --upgrade-deps venv
source venv/bin/activate
pip install instructlab
注意:英特尔Mac的附加构建参数
如果您的Mac配备Intel CPU,则必须添加前缀
CMAKE_ARGS="-DLLAMA_METAL=off"
到pip install
命令,以确保 该构建是在没有Apple M系列GPU支持的情况下完成的。
(venv) $ CMAKE_ARGS="-DLLAMA_METAL=off" pip install ...
使用AMD ROCm安装
python3 -m venv --upgrade-deps venv
source venv/bin/activate
pip cache remove llama_cpp_python
pip install 'instructlab[rocm]' \
--extra-index-url https://download.pytorch.org/whl/rocm6.0 \
-C cmake.args="-DLLAMA_HIPBLAS=on" \
-C cmake.args="-DAMDGPU_TARGETS=all" \
-C cmake.args="-DCMAKE_C_COMPILER=/opt/rocm/llvm/bin/clang" \
-C cmake.args="-DCMAKE_CXX_COMPILER=/opt/rocm/llvm/bin/clang++" \
-C cmake.args="-DCMAKE_PREFIX_PATH=/opt/rocm" \
-C cmake.args="-DLLAMA_NATIVE=off"
在Fedora 40+上,使用-DCMAKE_C_COMPILER=clang-17
和-DCMAKE_CXX_COMPILER=clang++-17
。
在M1/M2/M3 Mac上使用Apple Metal安装
注意:确保您的系统Python构建是
Mach-O 64-bit executable arm64
通过使用file -b $(command -v python)
, 或者如果您的系统是使用pyenv设置的,使用file -b $(pyenv which python)
命令。注意:此外,请确保
python3 -c 'import platform; print(platform.machine())'
和arch
返回arm64
。如果arch
返回i386
或python3
返回x86_64
,这意味着您的终端或Python正在英特尔仿真模式下运行,该模式未针对苹果硅进行优化。如果您已将数据从基于英特尔的Mac同步到苹果硅Mac(M1/M2/M3),这一点尤其重要,因为您可能需要查看和更新您的环境,尤其是以前安装在英特尔下的Homebrew
或Bash
等工具。
python3 -m venv --upgrade-deps venv
source venv/bin/activate
pip cache remove llama_cpp_python
pip install 'instructlab[mps]'
使用Nvidia CUDA安装
为了获得最佳的CUDA体验,安装vLLM对于服务Safetensors格式模型是必要的。
python3 -m venv --upgrade-deps venv
source venv/bin/activate
pip cache remove llama_cpp_python
pip install 'instructlab[cuda]' \
-C cmake.args="-DLLAMA_CUDA=on" \
-C cmake.args="-DLLAMA_NATIVE=off"
pip install vllm@git+https://github.com/opendatahub-io/vllm@2024.08.01
4、在您的venv
环境中,通过运行ilab
命令验证ilab
安装正确。
ilab
示例ilab
命令的输出
(venv) $ ilab
Usage: ilab [OPTIONS] COMMAND [ARGS]...
CLI for interacting with InstructLab.
If this is your first time running InstructLab, it's best to start with `ilab config init` to create the environment.
Options:
--config PATH Path to a configuration file. [default:
/home/user/.config/instructlab/config.yaml]
-v, --verbose Enable debug logging (repeat for even more verbosity)
--version Show the version and exit.
--help Show this message and exit.
Commands:
config Command Group for Interacting with the Config of InstructLab.
data Command Group for Interacting with the Data generated by...
model Command Group for Interacting with the Models in InstructLab.
system Command group for all system-related command calls
taxonomy Command Group for Interacting with the Taxonomy of InstructLab.
Aliases:
chat model chat
convert model convert
diff taxonomy diff
download model download
evaluate model evaluate
generate data generate
init config init
list model model_list
serve model serve
sysinfo system info
test model test
train model train
重要提示每个
ilab
命令都需要在Python虚拟环境中运行。您可以通过运行source venv/bin/activate
命令进入Python环境。
5、可选:可以为ilab
命令启用制表符完成。
Bash(4.4或更新版本)
使用以下命令在bash
中启用选项卡完成:
eval "$(_ILAB_COMPLETE=bash_source ilab)"
要在每次打开新shell时自动启用此功能, 您可以保存完成脚本并从~/.bashrc
获取:
_ILAB_COMPLETE=bash_source ilab > ~/.ilab-complete.bash
echo ". ~/.ilab-complete.bash" >> ~/.bashrc
Zsh
使用以下命令在zsh
中启用制表符完成:
eval "$(_ILAB_COMPLETE=zsh_source ilab)"
要在每次打开新shell时自动启用此功能, 您可以保存完成脚本并从~/.zshrc
:
_ILAB_COMPLETE=zsh_source ilab > ~/.ilab-complete.zsh
echo ". ~/.ilab-complete.zsh" >> ~/.zshrc
Fish
使用以下命令在fish
中启用选项卡完成:
_ILAB_COMPLETE=fish_source ilab | source
要在每次打开新shell时自动启用此功能, 您可以保存完成脚本并从~/.bashrc
获取:
_ILAB_COMPLETE=fish_source ilab > ~/.config/fish/completions/ilab.fish
三、使用
1、🏗️初始化ilab
1、通过运行以下命令初始化ilab
:
ilab config init
示例输出
Welcome to InstructLab CLI. This guide will help you set up your environment.
Please provide the following values to initiate the environment [press Enter for defaults]:
Path to taxonomy repo [taxonomy]: <ENTER>
2、当界面提示时,按Enter添加新的默认config.yaml
文件。
3、出现提示时,键入y将https://github.com/instructlab/taxonomy.git
存储库克隆到当前目录。
可选:如果要指向taxonomy
存储库的现有本地克隆,可以交互式地传递路径,也可以使用--taxonomy-path
标志传递路径。
初始化ilab后的示例ilab
(venv) $ ilab config init
Welcome to InstructLab CLI. This guide will help you set up your environment.
Please provide the following values to initiate the environment [press Enter for defaults]:
Path to taxonomy repo [taxonomy]: <ENTER>
`taxonomy` seems to not exists or is empty. Should I clone https://github.com/instructlab/taxonomy.git for you? [y/N]: y
Cloning https://github.com/instructlab/taxonomy.git...
ilab
将使用默认配置文件,除非另有指定。您可以使用任何ilab
命令的--config
参数覆盖此行为。
4、出现提示时,提供默认模型的路径。否则,将使用量化Merlinite模型的默认值-您可以通过ilab model download
下载此模型(见下文)。
(venv) $ ilab config init
Welcome to InstructLab CLI. This guide will help you set up your environment.
Please provide the following values to initiate the environment [press Enter for defaults]:
Path to taxonomy repo [taxonomy]: <ENTER>
`taxonomy` seems to not exists or is empty. Should I clone https://github.com/instructlab/taxonomy.git for you? [y/N]: y
Cloning https://github.com/instructlab/taxonomy.git...
Path to your model [/home/user/.cache/instructlab/models/merlinite-7b-lab-Q4_K_M.gguf]: <ENTER>
5、出现提示时,请选择列车配置文件。列车配置文件是支持加速训练行为的GPU特定配置文件。如果您在没有专用GPU的MacOS或Linux机器上,请选择No Profile (CPU, Apple Metal, AMD ROCm)
通过点击Enter。您可以使用各种标志与单独的ilab
命令一起使用,如果适用,这些标志允许您使用GPU。
Welcome to InstructLab CLI. This guide will help you to setup your environment.
Please provide the following values to initiate the environment [press Enter for defaults]:
Path to taxonomy repo [/home/user/.local/share/instructlab/taxonomy]:
Path to your model [/home/user/.cache/instructlab/models/merlinite-7b-lab-Q4_K_M.gguf]:
Generating `/home/user/.config/instructlab/config.yaml` and `/home/user/.local/share/instructlab/internal/train_configuration/profiles`...
Please choose a train profile to use.
Train profiles assist with the complexity of configuring specific GPU hardware with the InstructLab Training library.
You can still take advantage of hardware acceleration for training even if your hardware is not listed.
[0] No profile (CPU, Apple Metal, AMD ROCm)
[1] Nvidia A100/H100 x2 (A100_H100_x2.yaml)
[2] Nvidia A100/H100 x4 (A100_H100_x4.yaml)
[3] Nvidia A100/H100 x8 (A100_H100_x8.yaml)
[4] Nvidia L40 x4 (L40_x4.yaml)
[5] Nvidia L40 x8 (L40_x8.yaml)
[6] Nvidia L4 x8 (L4_x8.yaml)
Enter the number of your choice [hit enter for no profile] [0]:
No profile selected - any hardware acceleration for training must be configured manually.
Initialization completed successfully, you're ready to start using `ilab`. Enjoy!
GPU配置文件按GPU类型和存在的GPU数量列出。如果您碰巧拥有与上述任何配置文件类似的vRAM量的GPU配置,请随时试用!
ilab
系统后的ILAB目录布局
运行ilab config init
,您的目录在Linux系统上将如下所示:
├─ ~/.cache/instructlab/models/ (1)
├─ ~/.local/share/instructlab/datasets (2)
├─ ~/.local/share/instructlab/taxonomy (3)
├─ ~/.local/share/instructlab/checkpoints (4)
~/.cache/instructlab/models/
:包含所有下载的大型语言模型,包括您使用ilab生成的已保存输出。~/.local/share/instructlab/datasets/
:包含SDG阶段的数据输出,基于对分类存储库的修改。~/.local/share/instructlab/taxonomy/
:包含技能和知识数据。~/.local/share/instructlab/checkpoints/
:包含训练过程的输出
2、📥下载模型
运行ilab model download
命令。
ilab model download
ilab model download
从HuggingFace下载模型(~4.4G)的紧凑预训练版本:
(venv) $ ilab model download
Downloading model from Hugging Face: instructlab/merlinite-7b-lab-GGUF@main to /home/user/.cache/instructlab/models...
...
INFO 2024-08-01 15:05:48,464 huggingface_hub.file_download:1893: Download complete. Moving file to /home/user/.cache/instructlab/models/merlinite-7b-lab-Q4_K_M.gguf
注意⏳此命令可能需要几分钟或立即执行,具体取决于您的互联网连接或缓存的型号。如果您在连接到Hugging Face 时遇到问题,请参阅Hugging Face 讨论论坛了解更多详细信息。
2.1 从Hugging Face 存储库下载特定模型
-
如有必要,指定存储库、模型和Hugging Face 令牌。有关Hugging Face 令牌的更多信息,请点击此处
HF_TOKEN=<YOUR HUGGINGFACE TOKEN GOES HERE> ilab model download --repository=TheBloke/Mixtral-8x7B-Instruct-v0.1-GGUF --filename=mixtral-8x7b-instruct-v0.1.Q4_K_M.gguf
2.2 下载整个Hugging Face 存储库(Safetensors模型)
指定存储库,必要时指定Hugging Face 令牌。例如:
HF_TOKEN=<YOUR HUGGINGFACE TOKEN GOES HERE> ilab model download --repository=instructlab/granite-7b-lab
这些类型的模型对于支持GPU的系统或任何希望使用vLLM为模型提供服务的人都很有用。InstructLab在HuggingFace上提供我们Granite模型的Safetensor版本。
2.3 列出下载的模型
所有下载的模型可以看到ilab model list
。
ilab model list
示例输出的ilab model list
后ilab model download
(venv) $ ilab model list
+------------------------------+---------------------+--------+
| Model Name | Last Modified | Size |
+------------------------------+---------------------+--------+
| merlinite-7b-lab-Q4_K_M.gguf | 2024-08-01 15:05:48 | 4.1 GB |
+------------------------------+---------------------+--------+
3、🍴为模特服务
通过运行以下命令为模型提供服务:
ilab model serve
服务于非默认模型(例如Mixtral-8x7B-Instruct-v0.1):
ilab model serve --model-path models/mixtral-8x7b-instruct-v0.1.Q4_K_M.gguf
提供并准备好模型后,您将看到以下输出:
(venv) $ ilab model serve
INFO 2024-03-02 02:21:11,352 lab.py:201 Using model 'models/ggml-merlinite-7b-lab-Q4_K_M.gguf' with -1 gpu-layers and 4096 max context size.
Starting server process
After application startup complete see http://127.0.0.1:8000/docs for API.
Press CTRL+C to shut down the server.
**注意:**如果多个
ilab
客户端尝试同时连接到同一个InstructLab服务器,第一个客户端将连接到该服务器,而其他客户端将启动自己的临时服务器。这将需要主机上的额外资源。
提供非默认Safetensors模型(例如granite-7b-lab)。注意:这需要GPU。
确保已安装vllm:
pip show vllm
如果不是,请运行:
pip install vllm@git+https://github.com/opendatahub-io/vllm@2024.08.01
ilab model serve --model-path ~/.cache/instructlab/models/instructlab/granite-7b-lab
4、📣与模型聊天(可选)
因为你在一个终端窗口中提供模型,所以你必须创建一个新窗口并重新激活你的Python虚拟环境来运行ilab model chat
命令:
source venv/bin/activate
ilab model chat
与非默认模型(例如Mixtral-8x7B-Instruct-v0.1)聊天:
source venv/bin/activate
ilab model chat --model models/mixtral-8x7b-instruct-v0.1.Q4_K_M.gguf
请注意,使用--model
需要现有服务器具有该模型。如果没有,您必须退出服务器。ilab model chat
中的--model
能够代表您使用指定的模型启动服务器,如果该模型尚未在端口上运行。
在您开始向模型添加新技能和知识之前,您可以通过问它一个问题来检查它的基线性能,例如what is the capital of Canada?
。
注意:需要使用生成的合成数据来训练模型以使用新技能或知识
(venv) $ ilab model chat
╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────── system ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Welcome to InstructLab Chat w/ GGML-MERLINITE-7B-lab-Q4_K_M (type /h for help) │
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
>>> what is the capital of Canada? [S][default]
╭────────────────────────────────────────────────────────────────────────────────────────────────────── ggml-merlinite-7b-lab-Q4_K_M ───────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ The capital city of Canada is Ottawa. It is located in the province of Ontario, on the southern banks of the Ottawa River in the eastern portion of southern Ontario. The city serves as the political center for Canada, as it is home to │
│ Parliament Hill, which houses the House of Commons, Senate, Supreme Court, and Cabinet of Canada. Ottawa has a rich history and cultural significance, making it an essential part of Canada's identity. │
╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── elapsed 12.008 seconds ─╯
>>> [S][default]
四、💻创造新的知识或技能并训练模型
1、🎁贡献知识或写作技巧
1、为本地分类库贡献新的知识或组合技能。
详细的贡献说明可以在分类库中找到。
重要
模型要处理的问题/答案对中可以存在多少内容是有限制的。因此,在qna.yaml
文件中,仅向您的问题和答案种子示例对添加最多约2300个单词。
2、📜列出并验证您的新数据
您可以使用ilab taxonomy diff
命令来确保ilab
正在注册您的新知识或技能,并且您的贡献被正确格式化。此命令显示您的分类树中任何新的或修改的YAML文件。例如,以下是将名为foo-lang
的新技能添加到自由书写子目录后的有效组合技能贡献的预期结果:
(venv) $ ilab taxonomy diff
compositional_skills/writing/freeform/foo-lang/qna.yaml
Taxonomy in $HOME/.local/share/instructlab/taxonomy is valid :)
您还可以通过使用--taxonomy-base=empty
参数对空基执行差异来验证整个分类:
(venv) $ ilab taxonomy diff --taxonomy-base=empty
compositional_skills/general/tables/empty/qna.yaml
compositional_skills/general/tables/editing/add_remove/qna.yaml
...
Taxonomy in $HOME/.local/share/instructlab/taxonomy is valid :)
3、🚀生成合成数据集
在遵循这些说明之前,请确保您要添加技能或知识的现有模型仍在运行。或者,如果您通过--model
提供完全限定的模型路径,ilab data generate
可以为您启动服务器。
1、要根据分类库中新添加的知识或技能集生成合成数据集,请运行以下命令:
通过GPU加速:
ilab data generate --pipeline full --gpus <NUM_OF_GPUS>
没有GPU加速:
ilab data generate --pipeline simple
使用非默认模型(例如Mixtral-8x7B-Instruct-v0.1)生成数据,运行以下命令:
ilab data generate --model ~/.cache/instructlab/models/mistralai/mixtral-8x7b-instruct-v0.1 --pipeline full --gpus 4
注意:⏳这可能需要15分钟到1个多小时才能完成,具体取决于您的计算资源。
ilab data generate
的示例输出
(venv) $ ilab data generate
INFO 2024-07-30 19:57:44,093 numexpr.utils:161: NumExpr defaulting to 8 threads.
INFO 2024-07-30 19:57:44,452 datasets:58: PyTorch version 2.3.1 available.
Generating synthetic data using 'simple' pipeline, '$HOME/.cache/instructlab/models/mixtral-8x7b-instruct-v0.1.Q4_K_M.gguf' model, './taxonomy' taxonomy, against http://localhost:8000/v1 server
INFO 2024-07-30 19:57:45,084 instructlab.sdg:375: Synthesizing new instructions. If you aren't satisfied with the generated instructions, interrupt training (Ctrl-C) and try adjusting your YAML files. Adding more examples may help.
INFO 2024-07-30 19:57:45,090 instructlab.sdg.pipeline:153: Running pipeline single-threaded
INFO 2024-07-30 19:57:47,820 instructlab.sdg.llmblock:51: LLM server supports batched inputs: False
INFO 2024-07-30 19:57:47,820 instructlab.sdg.pipeline:197: Running block: gen_skill_freeform
INFO 2024-07-30 19:57:47,820 instructlab.sdg.pipeline:198: Dataset({
features: ['task_description', 'seed_question', 'seed_response'],
num_rows: 5
})
INFO 2024-07-30 20:02:16,455 instructlab.sdg:411: Generated 1 samples
...
合成数据集将是数据集目录中新创建的两个文件:~/.local/share/instructlab/datasets
。这些文件将被命名为skills_train_msgs_*.jsonl
和knowledge_train_msgs_*.jsonl
。
2、通过运行ls datasets
命令验证文件是否已创建。注意:您必须在XDG_DATA_HOME/instructlab
目录中。
(venv) $ ls datasets/
node_datasets_2024-08-12T20_31_15 test_mixtral-8x7b-instruct-v0-1_2024-08-12T20_23_06.jsonl
knowledge_recipe_2024-08-12T20_31_15.yaml node_datasets_2024-08-13T19_51_48 test_mixtral-8x7b-instruct-v0-1_2024-08-12T20_31_15.jsonl
knowledge_recipe_2024-08-13T19_51_48.yaml skills_recipe_2024-08-12T20_31_15.yaml test_mixtral-8x7b-instruct-v0-1_2024-08-13T19_47_59.jsonl
knowledge_train_msgs_2024-08-12T20_31_15.jsonl skills_recipe_2024-08-13T19_51_48.yaml test_mixtral-8x7b-instruct-v0-1_2024-08-13T19_51_48.jsonl
knowledge_train_msgs_2024-08-13T19_51_48.jsonl skills_train_msgs_2024-08-12T20_31_15.jsonl train_mixtral-8x7b-instruct-v0-1_2024-08-12T20_31_15.jsonl
messages_mixtral-8x7b-instruct-v0-1_2024-08-12T20_31_15.jsonl skills_train_msgs_2024-08-13T19_51_48.jsonl train_mixtral-8x7b-instruct-v0-1_2024-08-13T19_51_48.jsonl
messages_mixtral-8x7b-instruct-v0-1_2024-08-13T19_51_48.jsonl test_mixtral-8x7b-instruct-v0-1_2024-08-12T20_13_21.jsonl
可选:也可以通过以下方式针对不同的模型运行生成步骤 与OpenAI兼容的API。例如,由ilab model serve
或任何远程或本地托管的LLM生成的API(例如通过ollama
、LM Studio
等)。运行以下命令:
ilab data generate --endpoint-url http://localhost:8000/v1
请注意,还可以使用--taxonomy-base=empty
选项基于分类存储库的全部内容生成合成数据集:
ilab data generate --taxonomy-base=empty
4、👩🏫训练模型
使用合成数据增强数据集训练模型有许多选项。
注意: 每个
ilab
命令都需要在Python虚拟环境中运行。
在Linux本地训练模型
ilab model train
注意:⏳根据您的计算资源,此步骤可能需要几个小时才能完成。请停止
ilab model chat
,ilab model serve
首先释放资源。
如果你使用的是ilab model train --legacy
或在MacOS:
ilab model train
输出一个全新的模型,可以在models
目录中提供ggml-model-f16.gguf
。
如果您将ilab model train
与支持GPU的系统一起使用:
ilab model train
输出全新的模型,可以服务在~/.local/share/instructlab/checkpoints
目录中,这些模型可以通过ilab model evaluate
来选择最好的一个。
如果你使用的是ilab model train --strategy lab-multiphase
在M系列Mac上本地训练模型
在M系列Mac上本地训练模型就像运行一样简单:
ilab model train
**注意:**⏳这个过程需要一点时间才能完成(时间可能因硬件而异 和
ilab data generate
的输出,但在5到15分钟的顺序)
ilab model train
输出一个全新的模型,保存在<model_name>-mlx-q
目录中,名为adapters.npz
(Numpy
压缩数组格式)。例如:
(venv) $ ls instructlab-merlinite-7b-lab-mlx-q
adapters-010.npz adapters-050.npz adapters-090.npz config.json tokenizer.model
adapters-020.npz adapters-060.npz adapters-100.npz model.safetensors tokenizer_config.json
adapters-030.npz adapters-070.npz adapters.npz special_tokens_map.json
adapters-040.npz adapters-080.npz added_tokens.json tokenizer.jso
使用GPU加速在本地训练模型
训练对英伟达CUDA或AMD ROCm的图形处理器加速有实验支持。更多详情请看图形处理器加速文档。目前,硬件加速需要至少18 GB可用内存的数据中心图形处理器或高端消费图形处理器。
ilab model train --device=cuda
这个版本的ilab model train
输出全新的模型,可以服务于~/.local/share/instructlab/checkpoints
目录,这些模型可以通过ilab model evaluate
来选择最好的一个。
通过多阶段训练和GPU加速在本地训练模型
ilab model train
支持多阶段训练。这导致以下工作流程:
- 我们用知识训练模型
- 评估训练好的模型以找到最佳检查点
- 我们训练模型的技能
- 我们评估模型以找到最佳的整体检查点
ilab model train --strategy lab-multiphase --phased-phase1-data <knowledge train messages jsonl> --phased-phase2-data <skills train messages jsonl> -y
此命令从您的datasets
目录中接收两个.jsonl
文件,一个是知识jsonl,另一个是技能jsonl。-y
标志跳过询问用户是否确定要运行多阶段训练的交互式提示。
注意:此命令可能需要3小时或更长时间,具体取决于数据的大小和您运行的训练周期的数量。
在云中训练模型
按照训练中的说明进行操作。
⏳在每个平台上花费的大致时间:
- Google Colab:使用T4 GPU 5-10分钟
- Kaggle:使用P100 GPU约30分钟。
完成后,您可以直接在Google Colab或Kaggle笔记本中使用您的模型。在云上训练的模型将保存在云上。该模型也可以在本地下载和提供。
5、📜测试新训练的模型
运行以下命令来测试模型:
ilab model test
命令的输出将由训练前后模型的一系列输出组成。
6、🧪评估新训练的模型
您可以使用ilab model evaluate
命令来评估您正在使用多个基准测试训练的模型。目前支持四个基准测试。
基准 | 度量 | 全名 | 描述 | 参考 |
---|---|---|---|---|
MMLU | 知识 | 大规模多任务语言理解 | 根据一组标准化的知识数据测试模型,并根据模型的性能产生分数 | 测量大规模多任务语言理解 |
MMLU分支 | 知识 | 不适用 | 根据基本模型测试您的知识贡献,并根据性能差异产生分数 | 不适用 |
MTBench | 技能 | 多转弯基准 | 测试模型将其知识应用于判断模型的技能,并根据模型的性能产生分数 | MT-Bench(多转弯基准) |
MTBench罢了 | 技能 | 不适用 | 根据判断模型测试您的技能贡献,并根据性能差异产生分数 | 不适用 |
注
使用prometheus-8x7b-v2.0作为判断模型 默认。虽然您不需要使用此模型作为判断标准,但如果您有必要的硬件,强烈建议您这样做 资源。您可以通过ilab model download
下载。
运行MMLU
以下是在具有最少任务的本地模型上运行MMLU的示例:
$ export INSTRUCTLAB_EVAL_MMLU_MIN_TASKS=true # don't set this if you want to run full MMLU
$ export ILAB_MODELS_DIR=$HOME/.local/share/instructlab/models
$ ilab model evaluate --benchmark mmlu --model $ILAB_MODELS_DIR/instructlab/granite-7b-lab
...
# KNOWLEDGE EVALUATION REPORT
***
## MODEL
/home/example-user/.local/share/instructlab/models/instructlab/granite-7b-lab
***
### AVERAGE:
0.45 (across 3)
***
### SCORES:
mmlu_abstract_algebra - 0.35
mmlu_anatomy - 0.44
mmlu_astronomy - 0.55
以下是在具有最少任务的Hugging Face 模型上运行MMLU的示例:
$ export INSTRUCTLAB_EVAL_MMLU_MIN_TASKS=true # don't set this if you want to run full MMLU
$ ilab model evaluate --benchmark mmlu --model instructlab/granite-7b-lab
...
# KNOWLEDGE EVALUATION REPORT
***
## MODEL
instructlab/granite-7b-lab
***
### AVERAGE:
0.45 (across 3)
***
### SCORES:
mmlu_abstract_algebra - 0.35
mmlu_anatomy - 0.44
mmlu_astronomy - 0.55
注
目前,MMLU只能在本地或HugingFace上针对safetensors模型目录运行。目前不支持GGUF。
运行MMLU分支
下面是使用本地safetensors模型目录运行MMLU罢了:
$ export ILAB_MODELS_DIR=$HOME/.local/share/instructlab/models
$ ilab model evaluate --benchmark mmlu_branch --model $ILAB_MODELS_DIR/instructlab/granite-7b-lab --base-model $ILAB_MODELS_DIR/instructlab/granite-7b-lab
...
# KNOWLEDGE EVALUATION REPORT
***
## BASE MODEL
/home/example-user/.local/share/instructlab/models/instructlab/granite-7b-lab
***
## MODEL
/home/example-user/.local/share/instructlab/models/instructlab/granite-7b-lab
***
### AVERAGE:
+0.0 (across 1)
***
### NO CHANGE:
1. tonsils
下面是运行带有Hugging Face 模型的MMLU罢了:
$ ilab model evaluate --benchmark mmlu_branch --model instructlab/granite-7b-lab --base-model instructlab/granite-7b-lab
...
# KNOWLEDGE EVALUATION REPORT
***
## BASE MODEL
instructlab/granite-7b-lab
***
## MODEL
instructlab/granite-7b-lab
***
### AVERAGE:
+0.0 (across 1)
***
### NO CHANGE:
1. tonsils
小费
只要存在安全传感器模型,您就可以在Hugging Face 上混合和匹配正在运行的本地模型和远程模型。
运行MTBench
以下是使用本地safetensors模型目录运行MTBench的示例:
$ export ILAB_MODELS_DIR=$HOME/.local/share/instructlab/models
$ ilab model evaluate --benchmark mt_bench --model $ILAB_MODELS_DIR/instructlab/granite-7b-lab --judge-model $ILAB_MODELS_DIR/instructlab/granite-7b-lab
...
# SKILL EVALUATION REPORT
***
## MODEL
/home/example-user/.local/share/instructlab/models/instructlab/granite-7b-lab
***
### AVERAGE:
8.07 (across 91)
***
### TURN ONE:
8.64
***
### TURN TWO:
7.19
***
### ERROR RATE:
0.43
以下是使用本地GGUF模型运行MTBench的示例:
$ export ILAB_MODELS_DIR=$HOME/.local/share/instructlab/models
$ ilab model evaluate --benchmark mt_bench --model $ILAB_MODELS_DIR/granite-7b-lab-Q4_K_M.gguf --judge-model $ILAB_MODELS_DIR/granite-7b-lab-Q4_K_M.gguf
...
# SKILL EVALUATION REPORT
***
## MODEL
/home/example/.local/share/instructlab/models/granite-7b-lab-Q4_K_M.gguf
***
### AVERAGE:
5.0 (across 1)
***
### TURN ONE:
5.0
***
### TURN TWO:
N/A
***
### ERROR RATE:
0.99
注
目前,MTBench必须与本地模型一起使用。不支持直接从Hugging Face 中使用模型而不下载它们。
运行MTBench分支
以下是使用本地safetensors模型目录运行MTBench罢了:
$ export ILAB_MODELS_DIR=$HOME/.local/share/instructlab/models
$ export ILAB_TAXONOMY_DIR=$HOME/.local/share/instructlab/taxonomy
$ ilab model evaluate --benchmark mt_bench_branch \
--model $ILAB_MODELS_DIR/instructlab/granite-7b-lab \
--judge-model $ILAB_MODELS_DIR/instructlab/granite-7b-lab \
--base-model $ILAB_MODELS_DIR/instructlab/granite-7b-lab \
--taxonomy-path $ILAB_TAXONOMY_DIR \
--branch rc \
--base-branch main
...
# SKILL EVALUATION REPORT
***
## BASE MODEL
/home/example/.local/share/instructlab/models/instructlab/granite-7b-lab
***
## MODEL
/home/example/.local/share/instructlab/models/instructlab/granite-7b-lab
***
### IMPROVEMENTS:
1. compositional_skills/extraction/receipt/markdown/qna.yaml (+4.0)
2. compositional_skills/STEM/science/units_conversion/temperature_conversion/qna.yaml (+3.0)
3. compositional_skills/extraction/commercial_lease_agreement/bullet_points/qna.yaml (+3.0)
...
***
### REGRESSIONS:
1. compositional_skills/extraction/abstractive/title/qna.yaml (-5.0)
2. compositional_skills/extraction/receipt/bullet_points/qna.yaml (-4.5)
3. compositional_skills/writing/grounded/summarization/wiki_insights/one_line/qna.yaml (-4.0)
...
***
### NO CHANGE:
1. compositional_skills/STEM/math/reasoning/qna.yaml
2. compositional_skills/extraction/commercial_lease_agreement/csv/qna.yaml
3. compositional_skills/roleplay/explain_like_i_am/graduate/qna.yaml
...
***
### NEW:
1. compositional_skills/linguistics/organize_lists/qna.yaml
2. compositional_skills/extraction/invoice/plain_text/qna.yaml
3. compositional_skills/writing/grounded/summarization/wiki_insights/concise/qna.yaml
...
***
### ERROR RATE:
0.32
以下是使用本地GGUF模型运行MTBenchShop的示例:
$ export ILAB_MODELS_DIR=$HOME/.local/share/instructlab/models
$ export ILAB_TAXONOMY_DIR=$HOME/.local/share/instructlab/taxonomy
$ ilab model evaluate --benchmark mt_bench_branch --model $ILAB_MODELS_DIR/granite-7b-lab-Q4_K_M.gguf --judge-model $ILAB_MODELS_DIR/granite-7b-lab-Q4_K_M.gguf --base-model $ILAB_MODELS_DIR/granite-7b-lab-Q4_K_M.gguf --taxonomy-path $ILAB_TAXONOMY_DIR --branch rc --base-branch main
...
# SKILL EVALUATION REPORT
***
## BASE MODEL
/home/ec2-user/.local/share/instructlab/models/granite-7b-lab-Q4_K_M.gguf
***
## MODEL
/home/ec2-user/.local/share/instructlab/models/granite-7b-lab-Q4_K_M.gguf
***
### NO CHANGE:
1. compositional_skills/STEM/math/distance_conversion/qna.yaml
***
### NEW:
1. compositional_skills/linguistics/organize_lists/qna.yaml
2. compositional_skills/extraction/annual_report/reasoning/qna.yaml
3. compositional_skills/extraction/email/plain_text/qna.yaml
4. compositional_skills/extraction/technical_paper/tables/bullet_points/qna.yaml
5. compositional_skills/extraction/technical_paper/abstract/reasoning/qna.yaml
***
### ERROR RATE:
0.98
注
目前,MTBenchShop必须与本地模型一起使用。不支持直接从HugingFace使用模型而不下载它们。
7、🍴为新训练的模特服务
1、通过在运行服务器的终端中输入ctrl+c
键来停止正在运行的服务器。
重要:
- 🍎此步骤仅适用于带有M系列芯片的macOS(目前)。
- 在为新训练的模型服务之前,您必须将其转换为使用 该
ilab
。ilab model convert
命令将新模型转换为量化的GGUF格式,这是服务器在ilab model serve
命令中托管模型所需的。
2、通过运行以下命令转换新训练的模型:
ilab model convert
3、通过ilab model serve
命令在本地服务新训练的模型--model-path
指定新模型的参数:
ilab model serve --model-path <new model path>
你应该选择哪个模型来服务?运行ilab model convert
命令后,会生成一些文件和一个目录。你想要服务的模型以扩展名.gguf
并存在于后缀trained
的目录中。例如: instructlab-merlinite-7b-lab-trained/instructlab-merlinite-7b-lab-Q4_K_M.gguf
.
五、📣与新模型聊天(这次不是可选的)
使用聊天界面实时尝试微调模型,并通过运行以下命令查看结果是否优于带有聊天的模型的未经训练版本:
ilab model chat -m <New model path>
如果您有兴趣优化模型响应的质量,请参阅TROUBLESHOOTING.md
八、🚀将InstructLab升级到最新版本
要将InstructLab升级到最新版本,请使用以下命令:
pip install instructlab --upgrade
九、🎁提交你的新知识或技能
当然,最后一步是,如果您改进了模型,在分类存储库中打开一个拉取请求,其中包含带有改进数据的文件(例如qna.yaml
)。
2024-10-02(三)