StarCoderでコーディングアシスタントを作成 – 要約
概要
- 目的: StarCoder(16 Bパラメータのコード生成モデル)をチャット形式のコーディングアシスタント – StarChat‑α に変換する。
- 主要ステップ:
- 特別なチャットトークンを追加 (
<|system|>, <|assistant|>, <|user|>, \n).
- 対話データセットを準備: Open‑Assistant oasst1 データセットを英語のみの会話にフィルタリングし、新しいトークンを追加する。
- ユーザーラベルをマスク: ロスがアシスタントの出力のみに対して計算されるようにする。
- ファインチューニング: モデルが単一GPUでは大きすぎるため、DeepSpeed ZeRO‑3(または LoRA/FSDP などの代替手段)を使用してモデルを微調整する。
トークナイザーとマスキング
special_tokens = {
"additional_special_tokens": ["<|system|>", "<|assistant|>", "<|user|>", "\n"]
}
tokenizer.add_special_tokens(special_tokens)
<|assistant|> が単一のトークンID(49153)にマッピングされていることを確認する。
mask_user_labels はユーザーターンのトークンIDと次のアシスタントトークンまでのすべてを -100 に置き換え、ロス計算から除外する。
DeepSpeed ZeRO‑3でのトレーニング
git clone https://github.com/bigcode-project/starcoder.git
cd starcoder/chat
conda create -n starchat python=3.10 && conda activate starchat
# install pytorch (see pytorch.org) then:
pip install -r requirements.txt
huggingface-cli login
sudo apt-get install git-lfs
torchrun --nproc_per_node=8 train.py config.yaml \
--deepspeed deepspeed_z3_config_bf16.json
- 8 GPU A100(80 GB)構成を使用し、トレーニングは約45分で完了する。
config.yaml はデータセットパス、モデル名、トレーニングハイパーパラメータなどを定義する。
サンプル出力(コーディングタスク)
| プロンプト |
モデル出力 |
| Bar plot – 辞書から高さと年齢をプロット |
pandas/seaborn の完全なスクリプトを生成し、2つのサブプロットを作成して図を表示する。 |
| World map – ドイツとスペインを赤で塗る |
geopandas スクリプトを生成し、GeoJSON をロードして2か国を抽出し、指定された色でプロットする。 |
| Basketball stats – 得点とリバウンドの散布図 |
seaborn の散布図を返し、各選手に注釈を付け、適切なタイトル/ラベルを設定する。 |
評価
- 標準ベンチマーク(ARC、HellaSwag、MMLU、TruthfulQA)は、指示チューニング後にわずかな向上を示す:
| モデル |
ARC |
HellaSwag |
MMLU |
TruthfulQA |
| StarCoderBase |
0.30 |
0.46 |
0.33 |
0.40 |
| StarChat‑α |
0.33 |
0.49 |
0.34 |
0.44 |
- Human‑in‑the‑loop / AI‑in‑the‑loop: 115 の Python プロンプト(ChatGPT が生成したシードから作成)を使用し、GPT‑4 と ChatGPT に 1‑8 のスケールでモデルの応答を評価させた。StarChat‑α はベースモデルに対して約96 %の確率で勝利した。
制限事項とリスク
- 幻覚や安全でないコンテンツが依然として発生する可能性がある(RLHF や安全フィルタリングはなし)。
- 人口統計的バイアスは、訓練データの大部分が由来する GitHub コミュニティを反映している。
- ベンチマークは会話品質を捉えておらず、人間または LLM ベースの評価が必要である。
今後の方向性
- コストを抑えたファインチューニングのために LoRA や他の PEFT 手法を検討する。
- コード中心のデータと自然言語対話を組み合わせ、会話能力を向上させる。
- より広いコミュニティでの利用のためにオープンソースアシスタントとしてデプロイする。
リソース
引用
@article{Tunstall2023starchat-alpha,
author = {Tunstall, Lewis and Lambert, Nathan and Rajani, Nazneen and Beeching, Edward and Le Scao, Teven and von Werra, Leandro and Han, Sheon and Schmid, Philipp and Rush, Alexander},
title = {Creating a Coding Assistant with StarCoder},
journal = {Hugging Face Blog},
year = {2023},
note = {https://huggingface.co/blog/starchat-alpha},
}