StarCoderでコーディングアシスタントを作成 – 要約

概要

  • 目的: StarCoder(16 Bパラメータのコード生成モデル)をチャット形式のコーディングアシスタント – StarChat‑α に変換する。
  • 主要ステップ:
    1. 特別なチャットトークンを追加 (<|system|>, <|assistant|>, <|user|>, \n).
    2. 対話データセットを準備: Open‑Assistant oasst1 データセットを英語のみの会話にフィルタリングし、新しいトークンを追加する。
    3. ユーザーラベルをマスク: ロスがアシスタントの出力のみに対して計算されるようにする。
    4. ファインチューニング: モデルが単一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},
}

Sources