見出し画像

StabilityAI社による「StableCode」の発表

2023年8月8日、StabileDiffusionを生み出したStability AI社より「StableCode」が発表されました。

Stability AIは画像生成以外では、StabilityLMもリリースしていますが、コーディング用LLM生成AIプロダクトは初のリリースです。
「プログラマーの日常業務を支援するように設計されており、スキルを次のレベルに引き上げていく新しい開発者にとっても、素晴らしい学習ツール」というコンセプトだそうです。

3つ異なるモデルとデータセット

3つの異なるモデルを使用してコーディングを支援することで、開発者がより効率的になるためのユニークな方法を提供しています。

ベースモデルとBigCodeデータセット

ベースモデルは、BigCodeのスタックデータセット(v1.2)から多様なプログラミング言語のセットでトレーニングされ、Python、Go、Java、Javascript、C、markdown、C++のような一般的な言語で合計560BトークンのコードがStability社の高火力計算機環境(HPC)で焼き上がっています。

インストラクションセットInstruct-Alpha3B

基本モデルの確立後、複雑なプログラミング・タスクの解決を支援するために、命令モデルを特定のユースケース向けにチューニングされています。

https://huggingface.co/stabilityai/stablecode-instruct-alpha-3b

この結果を達成するために、Alpaca形式の~120,000のコード命令/応答ペアを基本モデルでトレーニングしたとのことで、HugginFace上で利用規約に同意することでアクセスできるようになっています。

Decoder Layer: Parallel Attention and MLP residuals with a single input LayerNorm (Wang & Komatsuzaki, 2021)

  • Position Embeddings: Rotary Position Embeddings (Su et al., 2021)

  • Bias: LayerNorm bias terms only

StableCode Instructを使用して、与えられた命令に対するレスポンスを生成するコード。

from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("stabilityai/stablecode-instruct-alpha-3b")
model = AutoModelForCausalLM.from_pretrained(
  "stabilityai/stablecode-instruct-alpha-3b",
  trust_remote_code=True,
  torch_dtype="auto",
)
model.cuda()
inputs = tokenizer("###Instruction\nGenerate a python function to find number of CPU cores###Response\n", return_tensors="pt").to("cuda")
tokens = model.generate(
  **inputs,
  max_new_tokens=48,
  temperature=0.2,
  do_sample=True,
)
print(tokenizer.decode(tokens[0], skip_special_tokens=True))

StableCode-Instruct-Alpha-3Bは単独で新しいコード補完を生成しますが、BigCodeとHuggingFaceが開発したツール(huggingface/huggingface-vscode.NET)と併用することが推奨されています

HuggingFace: VSCode extension for OSS models

https://marketplace.visualstudio.com/items?itemName=HuggingFace.huggingface-vscode

なお、このモデルはユーザに責任を持って使用されることが明確に意図されています。非合法的なコンテンツを作成するとか、非合法的な活動を促進するとか、または物理的もしくは経済的な危害のリスクが高い活動に従事するために使用することは意図されていません。非常に可用性が高いデータセットであると考えます。


一方で、StableCodeは、コーディングについてもっと学びたい人にとって理想的なビルディングブロックであり、ロングコンテキストウィンドウモデルは、単一行および複数行のオートコンプリート候補を確実にユーザーに提供するための完璧なアシスタントになりそうです。このモデルは、一度に多くのコード(16,000トークンのコンテキストウィンドウを持つ以前にリリースされたオープンモデルの2-4倍)を処理できるように構築されており、ユーザーは同時に最大5つの平均的なサイズのPythonファイルに相当するものをレビューまたは編集することができます。

以下は、デモとして示されているPytorchでのディープラーニングライブラリを利用した比較的複雑なPythonファイルを完成させるStableCodeの生成の様子です。グレーのテキストはStableCodeによる予測を示しています。

https://stability.ai/blog/stablecode-llm-generative-ai-coding

性能比較

リリースには同様のパラメータ数とトークン数でトレーニングされた他のモデルとの比較が示されています。一般的に利用されているOpenAIがGitHubで公開しているHumanEvalベンチマークを使用し、標準的なpass@1とpass@10のメトリクスを使用しています。

StabilityAI社が公開しているstablecodeのベンチマークスコア

HumanEvalベンチマーク 同規模のモデルとの比較(3B)。

比較対象はStarCodeBase、Replit-CoderはAndroidでもリリースされているこちらでしょうか。


画像生成「Stabile Diffusion」で有名なStability AI社ですが、「テクノロジーをより身近なものにすること」(make technology more accessible)を目指しており、StableLMに加えてリリースされたStableCodeはこの目標に向けた重要な一歩であると感じます。このブログではリリースでの公式解説をベースに紹介に止まりましたが、機会があれば具体的な使い方についてもレポートしてみたいと思います。皆さんもフィードバックありましたらぜひ 筆者@o_ob までどうぞ。


p.s. この記事を公開したその直後に日本語言語モデル「JapaneseStableLM Alpha」がリリースされました!

この記事が気に入ったらサポートをしてみませんか?