20以上のプログラミング言語からなる大規模なコードコーパスで事前学習された、130億個のパラメータを持つ大規模な多言語コード生成モデルであるCodeGeeXを紹介します。2022年6月22日の時点で、CodeGeeXは1,536個のAscend 910 AIプロセッサのクラスターで8,500億を超えるトークンでトレーニングされています。CodeGeeXにはいくつかのユニークな機能があります。
現実的な多言語ベンチマークのためのHumanEval-X。多言語コードの生成と翻訳の評価を標準化するために、HumanEval-Xベンチマークを開発してリリースしています。HumanEval-Xは、5つのプログラミング言語(Python、C ++、Java、JavaScript、およびGo)で820の人間が作成したコーディング問題を含む新しい多言語ベンチマークであり、これらの問題のそれぞれはテストとソリューションに関連付けられています。 ハギングフェイスで利用可能な使用法
CodeGeeXは、他のオープンソースの多言語ベースラインと比較して最高の平均パフォーマンスを達成します。
2022-12-13: CodeGeeX VS Code Extension のソースコードを codegeex-vscode-extension で公開しました。クイックスタートに従って開発を開始します。
2022-12-11: CodeGeeX が Jetbrains IDE (IntelliJ IDEA、PyCharm、GoLand、CLion など) で利用できるようになりましたので、こちらからダウンロードしてください。
2022-12-04: 量子化(必要なGPU RAMが少ない:27GB -> 15GB)とモデル並列処理(<8G RAMを搭載した複数のGPUで実行可能)のソースコードを公開しました。
2022-09-30: AscendプラットフォームとNVIDIAプラットフォームの両方のクロスプラットフォームのソースコードとモデルの重みをリリースします。
CodeGeeXは当初Mindsporeに実装され、Ascend 910 AIプロセッサを訓練しました。GPUプラットフォームでの使用を容易にするために、メガトロン-LMをベースにしたトーチ互換バージョンを提供しています。
Python 3.7+ / CUDA 11+ / PyTorch 1.10+ / DeepSpeed 0.6+ が必要です。次の方法でパッケージをインストールします。
codegeex
git clone git@github.com:THUDM/CodeGeeX.git
cd CodeGeeX
pip install -e .
このリンクからモデルの重みを適用してダウンロードします。一時的なダウンロードリンクが記載されたメールが届きます。次のコマンドで aria2 を使用してダウンロードすることをお勧めします (チェックポイントをダウンロードするのに十分なディスク容量 (~26GB) があることを確認してください)。
urls.txt
aria2c -x 16 -s 16 -j 4 --continue=true -i urls.txt
次のコマンドを実行して、完全なモデル ウェイトを取得します。
cat codegeex_13b.tar.gz.* > codegeex_13b.tar.gz
tar xvf codegeex_13b.tar.gz
CodeGeeXで最初のプログラムを生成してみてください。まず、でモデルの重みのパスを指定します。次に、プロンプト(自然言語の説明またはコードスニペット)をファイルに書き込み、たとえば、次のスクリプトを実行します。
configs/codegeex_13b.sh
tests/test_prompt.txt
# On a single GPU (with more than 27GB RAM)
bash ./scripts/test_inference.sh <GPU_ID> ./tests/test_prompt.txt
# With quantization (with more than 15GB RAM)
bash ./scripts/test_inference_quantized.sh <GPU_ID> ./tests/test_prompt.txt
# On multiple GPUs (with more than 6GB RAM, need to first convert ckpt to MP_SIZE partitions)
bash ./scripts/convert_ckpt_parallel.sh <LOAD_CKPT_PATH> <SAVE_CKPT_PATH> <MP_SIZE>
bash ./scripts/test_inference_parallel.sh <MP_SIZE> ./tests/test_prompt.txt
CodeGeeXに基づいて、VS CodeおよびJetbrains IDE用の無料の拡張機能も開発しています。
VS Code の場合は、マーケットプレイスで "codegeex" を検索するか、こちらからインストールしてください。詳細な手順については、「VS Code 拡張機能のガイダンス」を参照してください。開発者向けには、codegeex-vscode-extensionでソースコードもリリースしていますので、クイックスタートに従って開発を開始してください。
Jetbrains IDE の場合は、プラグインで "codegeex" を検索するか、ここで検索してください。 IDE のバージョンが 2021.1 以降であることを確認します。CodeGeeXは、IntelliJ IDEA、PyCharm、GoLand、CLion、Android Studio、AppCode、Aqua、DataSpell、DataGrip、Rider、RubyMine、WebStormをサポートするようになりました。
アーキテクチャ:CodeGeeXは、トランスフォーマーに基づく大規模な事前トレーニング済みプログラミング言語モデルです。これは左から右への自動回帰デコーダーであり、コードと自然言語を入力として受け取り、次のトークンの確率を予測します。CodeGeeXには40のトランスレイヤーが含まれており、非表示サイズはセルフアテンションブロック用に5,120、フィードフォワードレイヤー用に20,480で、そのサイズは130億のパラメーターに達します。最大シーケンス長は 2,048 です。
左:CodeGeeXのトレーニングデータに占めるプログラミング言語の割合。右:CodeGeeXのトレーニングステップに対するトレーニング損失のプロット。
コード コーパス: トレーニング データには 2 つの部分が含まれています。最初の部分は、オープンソースのコードデータセットであるThe PileとCodeParrotからのものです。Pile には、GitHub から 100 個以上の星を持つパブリック リポジトリを収集するコード コーパスのサブセットが含まれており、その中から 23 の一般的なプログラミング言語のコードが選択されています。2番目の部分は、Python、Java、C ++などの以前のデータセットには表示されない、パブリックGitHubリポジトリから直接廃棄された補足データです。潜在的に高品質のデータを取得するには、少なくとも1つの星を持ち、サイズが10MB未満のリポジトリが選択されます。ファイルは、1) 1 行あたり平均 100 文字を超える場合、2) 自動的に生成される場合、3) アルファベットの比率が 40% 未満の場合、または 4) 100 KB を超えるか 1 KB 未満の場合にフィルターで除外されます。モデルが異なる言語を区別できるように、各セグメントの先頭に言語固有のプレフィックスを 、などの形式で追加します。トークン化には、GPT-2と同じトークナイザーを使用し、空白を追加のトークンとして処理するため、語彙数は50,400トークンになります。合計で、コードコーパスには158.7Bトークンを持つ23のプログラミング言語があります。
[Comment sign] language: [LANG]
# language: Python
トレーニング: CodeGeeX を Mindspore 1.7 に実装し、1,536 Ascend 910 AI プロセッサ (32GB) でトレーニングします。モデルの重みはFP16形式ですが、レイヤーノルムにはFP32を使用し、精度と安定性を高めるためにソフトマックスを使用しています。モデル全体で約27GBのメモリを消費します。学習効率を上げるため、ZeRO-2オプティマイザを有効にした8ウェイモデル並列学習と192ウェイデータ並列学習を採用しています。マイクロバッチサイズは 16 で、グローバルバッチサイズは 3,072 に達します。さらに、要素ごとの演算子融合、高速ゲル活性化、行列乗算次元最適化など、トレーニング効率をさらに高めるための手法を採用しています。トレーニングプロセス全体は、2022年4月18日から6月22日までの約2か月かかり、その間に850Bトークンがトレーニングのために渡されました。
コード生成モデルの多言語能力をよりよく評価するために、新しいベンチマークHumanEval-Xを提案します。これまでの研究では、誤解を招くことが多い意味的類似性(CodeBLEUなど)の下で多言語プログラム合成を評価していましたが、HumanEval-Xは生成されたプログラムの機能的正しさを評価しています。HumanEval-Xは、Python、C++、Java、JavaScript、およびGoの820の高品質の人間が作成したデータサンプル(それぞれテストケース付き)で構成されており、さまざまなタスクに使用できます。
HumanEval-Xがサポートするタスクの図。宣言、ドキュメント文字列、およびソリューションは、それぞれ赤、緑、青でマークされます。コード生成では、宣言とドキュメント文字列を入力として使用してソリューションを生成します。コード変換では、両方の言語の宣言が使用され、ソース言語のソリューションがターゲット言語のソリューションに翻訳されます。
HumanEval-Xでは、各言語のすべてのサンプルに宣言、ドキュメント文字列、およびソリューションが含まれており、生成、翻訳、要約などのさまざまなダウンストリームタスクをサポートするためにさまざまな方法で組み合わせることができます。現在、コード生成とコード変換の2つのタスクに焦点を当てています。コード生成の場合、モデルは宣言と docstring を入力として使用してソリューションを生成します。コード翻訳の場合、モデルは両方の言語の宣言とソース言語のソリューションを入力として使用して、ターゲット言語でソリューションを生成します。モデルが問題を直接解決しないように、コード変換中に説明を削除します。どちらのタスクでも、コーデックスで提案されている偏りのないpass@kメトリックを使用します: $\text{pass}@k:= \mathbb{E}[1-\frac{\tbinom{n-c}{k}}{\tbinom{n}{k}}]$、$n=200$ および $k\in(1,10,100)$ を使用します。
左:HumanEval-Xの5つの言語のコード生成タスクの詳細なpass@k(k=1,10,100)パフォーマンス。右:各モデルのすべての言語の平均パフォーマンス。CodeGeeXは、InCoder-6.7B、CodeGen-Multi-6B、CodeGen-Multi-16Bと比較して最高の平均パフォーマンスを達成しています。
CodeGeeXを、他の2つのオープンソースコード生成モデル、InCoder(Metaから)とCodeGen(Salesforceから)と比較します。具体的には、InCoder-6.7B、CodeGen-Multi-6B、CodeGen-Multi-16Bが考慮されます。CodeGeeXは、より小さなスケールのモデル(7.5%~16.3%)を大幅に上回り、より大きなスケールのCodeGen-Multi-16Bと競争力があります(平均パフォーマンス54.76%対54.39%)。CodeGeeXは、言語全体で最高の平均パフォーマンスを達成します。
HumanEval-Xコード変換タスクの結果。言語的に最高のパフォーマンスは太字で示されています。
また、異なるプログラミング言語間の翻訳のパフォーマンスも評価します。CodeGeeXのゼロショットパフォーマンスと、微調整されたCodeGeeX-13B-FT(XLCoSTのコード変換タスクのトレーニングセットを使用して微調整。Goは元のセットにはないため、小さなセットを追加します)。結果は、モデルが言語を好むことを示しています、例えば、CodeGeeXは他の言語をPythonとC ++に翻訳するのが得意ですが、CodeGen-Multi-16BはJavaScriptとGoへの翻訳に優れています。これらはおそらく、トレーニングコーパスの言語分布の違いが原因である可能性があります。20の翻訳ペアの中で、A対BとB対Aのパフォーマンスは常に負の相関関係にあることも観察されており、これは現在のモデルがまだすべての言語をうまく学習できないことを示している可能性があります。
HumanEval-Xの使い方については、使い方をご覧ください。コミュニティが問題を追加したり、他の言語に拡張したりしてHumanEval-Xに貢献することを強く歓迎しますので、HumanEval-Xの標準形式を確認し、プルリクエストを追加してください。
ご意見やご提案がございましたら、codegeex@aminer.cn でお知らせください。
鄭 秦凱 (清華樽)、シャオ・シア (清華樽)、徐 斗(清華浪)
清華KEG---清華大学の知識工学グループ:アオハン・ゼン、ウェンディ・チェン、リーロン・シュエ
清華IIISの楊志林グループ:イーフェン・リウ、ヤンル・チェン、イーチェン・シュ(BUPT、清華大学を訪問したときに作業が行われた)
ペンチェン研究所:チンギュ・チェン、ジョンチー・リー、ガオジュン・ファン
Zhipu.AI:薛玉飛、王山山、山傑、江浩漢、呂劉、玄雪、張彭
アセンドとマインドスポアチーム:イーファン・ヤオ、テン・スー、チーフイ・デン、ビン・ジョウ
チェン・ルイジェ(清華)、ペイナン・ユー(清華)、ジンヤオ・チャン(Zhipu.AI)、ボーウェン・ホアン(Zhipu.AI)、シャオユ・ワン(Zhipu.AI)
楊志林(清華IIIS)、ユシャオドン(清華KEG)、ウェングアン・チェン(清華パックマン)、唐傑(清華KEG)
Zhipu.AI---機械に人間のように考えるように教えることを目的としたAIスタートアップ
Jie Tang (Tsinghua KEG & BAAI)
私たちのコードはApache-2.0ライセンスの下でライセンスされています。