InstructLab - 基于合成数据的 LLM 对齐调整方法

news2024/10/5 10:28:18

文章目录

    • 一、关于 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)工具,允许您执行以下操作:

  1. 下载预训练的大型语言模型(LLM)。
  2. 与LLM聊天。

要向预先训练的LLM添加新知识和技能,请将信息添加到配套的分类存储库。

将知识和技能添加到分类法后,您可以执行以下操作:

  1. 使用ilab根据本地taxonomy库中的更改生成新的合成训练数据。
  2. 使用新的训练数据重新训练LLM。
  3. 与重新训练的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上安装ilabCLI时,您可能必须运行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,以存储ilabCLI运行时需要的文件,并通过运行以下命令将cd放入该目录:

mkdir instructlab
cd instructlab

**注意:**本文档中的以下步骤将Python venv用于虚拟环境。但是,如果您使用其他工具(如pyenv或Conda Miniforge)来管理机器上的Python环境,请继续使用该工具。否则,您可能会遇到已安装但未在venv中找到的软件包的问题。


3、有几种方法可以在本地安装ilabCLI。从以下说明中选择首选的安装方法。然后,您可以安装ilab并激活您的venv环境。

注意:⏳以下步骤中显示的python3二进制文件是您在上述步骤中安装的Python版本。命令也可以是python3.11python3.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返回i386python3返回x86_64,这意味着您的终端或Python正在英特尔仿真模式下运行,该模式未针对苹果硅进行优化。如果您已将数据从基于英特尔的Mac同步到苹果硅Mac(M1/M2/M3),这一点尤其重要,因为您可能需要查看和更新您的环境,尤其是以前安装在英特尔下的HomebrewBash等工具。

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、出现提示时,键入yhttps://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)

  1. ~/.cache/instructlab/models/:包含所有下载的大型语言模型,包括您使用ilab生成的已保存输出。
  2. ~/.local/share/instructlab/datasets/:包含SDG阶段的数据输出,基于对分类存储库的修改。
  3. ~/.local/share/instructlab/taxonomy/:包含技能和知识数据。
  4. ~/.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 listilab 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_*.jsonlknowledge_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(例如通过ollamaLM 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 chatilab 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.npzNumpy压缩数组格式)。例如:

(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支持多阶段训练。这导致以下工作流程:

  1. 我们用知识训练模型
  2. 评估训练好的模型以找到最佳检查点
  3. 我们训练模型的技能
  4. 我们评估模型以找到最佳的整体检查点
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(目前)。
  • 在为新训练的模型服务之前,您必须将其转换为使用 该ilabilab 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(三)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2189728.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AL生成文章标题指定路径保存:创新工具助力内容创作高效启航

在信息爆炸的时代&#xff0c;一个吸引人的标题是文章成功的第一步。它不仅要准确概括文章内容&#xff0c;还要能激发读者的好奇心&#xff0c;促使他们点击阅读。随着人工智能技术的飞速发展&#xff0c;AL生成文章标题功能正逐渐成为内容创作者的新宠&#xff0c;看看它是如…

Mysql数据库--聚合查询、分组查询、联合查询(不同的连接方式)

文章目录 1.查询的进阶版1.1查询搭配插入进行使用1.2聚合查询1.3group by分组查询1.4联合查询之笛卡尔积1.5左外连接&#xff0c;右外连接介绍join on1.6自连表 1.查询的进阶版 1.1查询搭配插入进行使用 我们首先创建两张表&#xff0c;一个叫做student,一个叫做student2,两个…

DenseNet算法:口腔癌识别

本文为为&#x1f517;365天深度学习训练营内部文章 原作者&#xff1a;K同学啊 一 DenseNet算法结构 其基本思路与ResNet一致&#xff0c;但是它建立的是前面所有层和后面层的密集连接&#xff0c;它的另一大特色是通过特征在channel上的连接来实现特征重用。 二 设计理念 三…

遥感影像-语义分割数据集:云及云阴影数据集详细介绍及训练样本处理流程

原始数据集详情 简介&#xff1a;数据集包括108个GF-1宽幅&#xff08;WFV&#xff09;的云和云阴影掩码&#xff0c;该数据集用于GF-1 WFV图像中的云和云阴影检测。 KeyValue卫星类型高分一宽幅覆盖区域未知场景未知分辨率16m数量108张单张尺寸17344*15627原始影像位深16位标…

如何在银河麒麟服务器中获取关键日志信息

如何在银河麒麟服务器中获取关键日志信息 1、获取messages日志2、获取dmesg输出 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在银河麒麟服务器中&#xff0c;获取messages和dmesg日志是排查问题的重要步骤。 1、dmesg命令用于显示或控制…

【深度学习基础模型】深度残差网络(Deep Residual Networks, DRN)详细理解并附实现代码。

【深度学习基础模型】深度残差网络&#xff08;Deep Residual Networks, DRN&#xff09;详细理解并附实现代码。 【深度学习基础模型】深度残差网络&#xff08;Deep Residual Networks, DRN&#xff09;详细理解并附实现代码。 文章目录 【深度学习基础模型】深度残差网络&a…

C++ | Leetcode C++题解之第457题环形数组是否存在循环

题目&#xff1a; 题解&#xff1a; class Solution { public:bool circularArrayLoop(vector<int>& nums) {int n nums.size();auto next [&](int cur) {return ((cur nums[cur]) % n n) % n; // 保证返回值在 [0,n) 中};for (int i 0; i < n; i) {if …

【人工智能深度学习应用】妙搜API最佳实践

功能概述 AI妙搜通过集成夸克通用搜索引擎&#xff0c;能够提供一个强大的搜索素材功能&#xff0c;大大提升内容创作者在寻找和使用网络资源时的效率和便捷性。用户只需输入相关的关键词或描述&#xff0c;系统将根据用户的搜索词在互联网上进行搜索&#xff0c;并展示与搜索…

【3D目标检测】激光雷达和相机联合标定(一)——ROS同步解包

ROS同步解包 引言1 鱼香ROS一键安装ros-docker脚本&#xff1a;2 指定目录映射3 数据解包3.1 解包脚本3.2 依赖安装3.3 运行脚本&#xff0c;解包 引言 总结步骤如下&#xff1a; 采集同步数据&#xff1a;ROS录制&#xff08;推荐&#xff09;&#xff0c;或者代码同步触发采…

C++入门基础知识99——【关于C++ 成员运算符】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于C 成员运算符的相关内容&#xff01; 关…

昇思学习打卡营第32天|基于ResNet50的中药炮制饮片质量判断模型

背景介绍 中药炮制是根据中医药理论&#xff0c;依照临床用药需求&#xff0c;通过调剂和制剂要求&#xff0c;将中药材制备成中药饮片的过程。老百姓日常使用的中药饮片&#xff0c;是中药炮制技术的成果。中药炮制过程中&#xff0c;尤其是涉及到水火处理时&#xff0c;必须注…

CNN模型对CIFAR-10中的图像进行分类

代码功能 这段代码展示了如何使用 Keras 和 TensorFlow 构建一个卷积神经网络&#xff08;CNN&#xff09;模型&#xff0c;用于对 CIFAR-10 数据集中的图像进行分类。主要功能包括&#xff1a; 加载数据&#xff1a;从 CIFAR-10 数据集加载训练和测试图像。 数据预处理&#…

HTTP【网络】

文章目录 HTTPURL(Uniform Resource Lacator) HTTP协议格式HTTP的方法HTTP的状态码HTTP常见的Header HTTP 超文本传输协议&#xff0c;是一个简单的请求-响应协议&#xff0c;HTTP通常运行在TCP之上 URL(Uniform Resource Lacator) 一资源定位符&#xff0c;也就是通常所说的…

NIM简单实践-图像分割

项目背景 我正在学习一个图像分割的 Demo&#xff0c;使用 NVIDIA 提供的预训练大模型进行光学字符检测 (OCDNet) 和光学字符识别 (OCRNet)。这些模型专门为光学字符检测和识别设计&#xff0c;能够自动将图像中的字符进行分割和识别。 预训练模型介绍 OCDNet (Optical Char…

Windows NTLM中继攻击(PortBender二进制可执行文件)

Windows NTLM中继攻击&#xff08;PortBender二进制可执行文件) 前言 最近在完善自己的一套TTPs&#xff08;战术、技术和程序&#xff09;以应对未来的网络作战、项目和攻防演练需求&#xff0c;翻到了PortBender&#xff0c;我觉得不依赖C2和影响主机本身实现这一切非常有趣…

如何使用ssm实现民族大学创新学分管理系统分析与设计+vue

TOC ssm763民族大学创新学分管理系统分析与设计vue 第1章 绪论 1.1 课题背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域位置往往是人们思想上不…

Linux 生产者消费者模型

前言 生产者消费者模型&#xff08;CP模型&#xff09;是一种十分经典的设计&#xff0c;常常用于多执行流的并发问题中&#xff01;很多书上都说他很高效&#xff0c;但高效体现在哪里并没有说明&#xff01;本博客将详解&#xff01; 目录 前言 一、生产者消费者模型 1.…

绝美的登录界面!滑动切换效果

绝美登录界面&#xff01;添加了管理员账号和测试账号 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><scri…

RC正弦波振荡电路

0、判断电路能否产生正弦波震荡的条件 如上图所示&#xff0c; Xo:输出量&#xff1b; A:放大器的增益&#xff1b; F:反馈系数。 上式分别为RC正弦波震荡器的幅值条件和相位条件&#xff0c;为了使输出量在合闸后能够有一个从小到大直至平衡在一定幅值的过程&#xff0c;电…

《Linux服务与安全管理》| 配置YUM源并验证

《Linux服务与安全管理》配置YUM源并验证 目录 《Linux服务与安全管理》配置YUM源并验证 任务一&#xff1a;配置本地YUM源 任务二&#xff1a;配置网络YUM源 学生姓名 **** 学号 **** 专业 **** 任务名称 配置YUM源并验证 完成日期 **** 任务目标 知识 了解配…