InstructLabを試してみた。part1 環境構築編

# InstructLabとは
![dev_flow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175092/2b900389-dd1f-12cf-b9b5-a38563d9c7c9.png)

InstructLabは、IBM ResearchとRed Hatによって開発されたオープンソースプロジェクトで、生成AI（特に大規模言語モデル、LLM）のカスタマイズとチューニングを効率的に行うためのプラットフォームです。これは、AIの開発をコミュニティ主導で進めるための新しい手法を提供し、特定のタスクに適応した合成データを生成し、モデルを強化することを目指しています。

## 背景
生成AIとLLMは、多くの産業に革命をもたらしていますが、効果的に使用し、拡張するためには多大な投資と努力が必要です。特に、モデルを適切にチューニングし、企業のニーズに合わせてカスタマイズするためには、高品質なデータが必要です。しかし、そのデータを生成することは困難でコストがかかるため、多くの企業が苦労しています。

## 特徴
合成データ生成: LAB（Large-Scale Alignment for ChatBots）手法に基づき、体系的に合成データを生成することで、モデルが新しいタスクを迅速に学習できるようにします。
コミュニティ主導: 開発者が共同でモデルを強化するためのプラットフォームを提供し、オープンな場での貢献を促進します。
低コストで効率的: 通常のLLMの学習よりも短時間、低コストでモデルを改善できる技術を提供します。

## 利点
- 柔軟なカスタマイズ: モデルが既存の知識を上書きせずに、新しい知識や機能を取り入れることができます。
- 高パフォーマンス: IBMのベンチマークテストでは、InstructLab手法を用いたモデルが優れたパフォーマンスを示しています。
- アクセスと支援: 開発者は、プロジェクトのためのシードコンピューティングとインフラストラクチャーにアクセスでき、Red Hatが全体調整を行い、週単位でコミュニティからの貢献を統合します。

https://instructlab.ai

https://jp.newsroom.ibm.com/2024-05-24-blog-announcement-democratizing-large-language-model-development-with-instructlab-support-in-watsonx-ai


# 試してみた
以下の情報をもとに実施してみました。

https://github.com/instructlab/instructlab


## 0. 必要な環境
以下が公式サイトで紹介されている要件です。ここではApple M1/Python 3.12を使用します。(Pythonのバージョンは高いですが、いったん最後まで実施してみました。)

```
- 🍎 Apple M1/M2/M3 Mac or 🐧 Linux system (tested on Fedora). Note Linux is not fully supported (testing a trained model does not currently work on Linux). We anticipate support for more operating systems in the future.
- C++ compiler
- Python 3.10 or Python 3.11
- Approximately 60GB disk space (entire process)
```

## 1. Anaconda環境準備
必須ではないのですが、既存の環境と分けて作成したいため、今回はAnacondaで環境を作成します。
```bash
conda create --name ilab
```
:::note info
Pythonはx86ではなくarm64である必要があります。
```file -b $(command -v python)```あるいは```file -b $(command -v python3)```で確認してみてください。
:::

Anaconda環境を起動します。
```bash
conda activate ilab
```

## 2. instructlabのインストール
ディレクトリを作成します。
```
mkdir instructlab
cd instructlab
```

instructlabをインストールします。
```bash
python3 -m venv --upgrade-deps venv
source venv/bin/activate
pip cache remove llama_cpp_python
pip install instructlab
```
うまくインストールできたを確認します。
```bash
ilab
```
以下が表示されます。
```bash
Usage: ilab [OPTIONS] COMMAND [ARGS]...

  CLI for interacting with InstructLab.

  If this is your first time running ilab, it's best to start with `ilab init`
  to create the environment.

Options:
  --config PATH  Path to a configuration file.  [default: config.yaml]
  --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.
  sysinfo   Print system information
  taxonomy  Command Group for Interacting with the Taxonomy of InstructLab.

Aliases:
  chat: model chat
  convert: model convert
  diff: taxonomy diff
  download: model download
  generate: data generate
  init: config init
  serve: model serve
  test: model test
  train: model train
```

## 3. 初期化
ilabを初期化します。
```bash
ilab config init
```
以下が出力されます。
```bash
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 [taxonomy]:
```
そのままエンターキーを押すと次のメッセージが表示されますので、yを入力してからエンターキーを押します。
```bash
`taxonomy` seems to not exist or is empty. Should I clone https://github.com/instructlab/taxonomy.git for you? [y/N]: 
```
以下が表示されます。
```bash
Cloning https://github.com/instructlab/taxonomy.git...
Generating `config.yaml` in the current directory...
Initialization completed successfully, you're ready to start using `ilab`. Enjoy!
```

## 4. モデルの利用
モデルをダウンロードします。特に指定しない場合は```merlinite-7b-lab-Q4_K_M.ggu```がダウンロードされました。
```bash
ilab model download
```

モデルを利用できるようにします。
```bash
ilab model serve
```
以下のようにひょうじされます。
```
INFO xxxx-xx-xx xx:xx:xx,xxx serve.py:51: serve Using model 'models/merlinite-7b-lab-Q4_K_M.gguf' with -1 gpu-layers and 4096 max context size.
INFO xxxx-xx-xx xx:xx:xx,xxx server.py:218: server Starting server process, press CTRL+C to shutdown server...
INFO xxxx-xx-xx xx:xx:xx,xxx server.py:219: server After application startup complete see http://127.0.0.1:8000/docs for API.
```

先ほどのターミナルはそのままにして、新しいターミナルを立ち上げて、以下を実行します。
```
cd /instructlab
source venv/bin/activate
ilab model chat
```
以下の画面が現れ、チャットできるようになります。
```
╭────────────────────────────────────────────── system ──────────────────────────────────────────────╮
│ Welcome to InstructLab Chat w/ MODELS/MERLINITE-7B-LAB-Q4_K_M.GGUF (type /h for help)              │
╰────────────────────────────────────────────────────────────────────────────────────────────────────╯
>>> What is the highest mountain in Japan?                                                [S][default]
╭─────────────────────────────── models/merlinite-7b-lab-Q4_K_M.gguf ────────────────────────────────╮
│ The highest mountain in Japan is called Mount Fuji. It has an elevation of 3776 meters above sea   │
│ level.                                                                                             │
╰──────────────────────────────────────────────────────────────────────────── elapsed 1.088 seconds ─╯
>>>                                                                                       [S][default]

```

このように、まずはセットアップをが完了しました。
[part2](https://qiita.com/agumon/items/a4ccb1fc783306a4d26e)では知識の登録、データの生成、モデルのチューニングに進みます。