モデル概要
モデル特徴
モデル能力
使用事例
🚀 aiXcoder-7B コード大規模言語モデル
このモデルは、複数のプログラミング言語のコードを理解し、生成するように設計されており、コードの補完、理解、生成などのタスクで最先端の性能を発揮します。
🏠 公式サイト|🛠 VS Code プラグイン|🛠 Jetbrains プラグイン|Github プロジェクト
目次
📚 モデルの紹介
大規模コードモデルの能力が徐々に明らかになる中、aiXcoderは、これらのモデルを実際の開発シナリオでより有益に活用する方法を常に模索してきました。そのため、aiXcoder 7B Baseをオープンソース化しました。このモデルは、1.2Tのユニークなトークンで広範なトレーニングを受けており、モデルの事前学習タスクとコンテキスト情報は、実世界のコード生成コンテキストに合わせて独自に設計されています。
aiXcoder 7B Baseは、同じパラメータサイズのすべてのモデルの中で、コード補完シナリオで最も効果的なモデルであり、多言語のnl2codeベンチマークでの平均性能でも、codellama 34BやStarCoder2 15Bなどの主流モデルを上回っています。
大規模コードモデルの応用に関する私たちの継続的な探求の中で、aiXcoder 7B Baseのリリースは重要なマイルストーンを表しています。現在のaiXcoder 7B Baseのバージョンは、コード補完とコード生成タスクの効率と精度を向上させることに焦点を当てた基礎モデルであり、これらのシナリオで開発者に強力なサポートを提供することを目指しています。ただし、このバージョンは特定の命令微調整を受けていないため、テストケース生成やコードデバッグなどの高度な専門タスクではまだ最適な性能を発揮できない可能性があります。
しかし、私たちはすでにaiXcoderモデルシリーズのさらなる開発計画を進めています。近い将来、テストケース生成やコードデバッグなど、より広範なプログラミングタスクに対して細心の注意を払って命令微調整された新しいバージョンのモデルをリリースする予定です。これらの命令微調整されたモデルを通じて、開発者により包括的で深いプログラミングサポートを提供し、ソフトウェア開発の各段階での効率を最大化することを目指しています。
🚀 クイックスタート
環境要件
オプション1: 環境の構築
モデルの推論コードを実行するには、以下の環境設定が必要です。
- Python 3.8以上
- PyTorch 2.1.0以上
- sentencepiece 0.2.0以上
- transformers 4.34.1以上(transformersライブラリで推論を実行する場合)
以下のコマンドを使用して、すべての依存関係をインストールしてください。
conda create -n aixcoder-7b python=3.11
conda activate aixcoder-7b
git clone git@github.com:aixcoder-plugin/aiXcoder-7b.git
cd aiXcoder-7b
pip install -r requirements.txt
requirements.txt
には、必要なすべてのライブラリとそのバージョンが記載されています。
特に大規模なモデルの場合、より高速な推論速度を実現するために、flash attention
のインストールをお勧めします。flash attention
は、精度を犠牲にすることなく、Transformerベースのモデルの計算時間を大幅に削減する最適化されたアテンションメカニズムです。
作業を開始する前に、flash attention
がGPUアクセラレーションを利用するため、環境がCUDA要件を満たしていることを確認してください。以下の手順に従ってflash attention
をインストールします。
git clone git@github.com:Dao-AILab/flash-attention.git
cd flash-attention
MAX_JOBS=8 python setup.py install
オプション2: Docker
一貫性のある分離された環境を提供するために、Dockerを使用してモデルの推論コードを実行することをお勧めします。以下は、Dockerを使用してモデルを設定および使用する方法です。
- Dockerのインストール: まだインストールしていない場合は、マシンにDockerをインストールしてください。
- Dockerイメージの取得: Docker HubからDockerイメージを取得します。
docker pull pytorch/pytorch:2.1.0-cuda11.8-cudnn8-devel
- コンテナの実行: イメージを取得したら、Dockerコンテナ内でモデルを実行できます。
docker run --gpus all -it -v /dev/shm:/dev/shm --name aix_instance pytorch/pytorch:2.1.0-cuda11.8-cudnn8-devel /bin/bash
pip install sentencepiece
git clone git@github.com:aixcoder-plugin/aiXcoder-7b.git
cd aiXcoder-7b
このコマンドは、pytorchイメージからaix_instance
という名前のコンテナを起動します。このコンテナ内でモデルと対話できます。
特に大規模なモデルの場合、より高速な推論速度を実現するために、flash attention
のインストールをお勧めします。
git clone git@github.com:Dao-AILab/flash-attention.git
cd flash-attention
MAX_JOBS=8 python setup.py install
- モデルの推論: Dockerコンテナ内で、「推論の例」セクションで説明されているようにモデルの推論コードを実行できます。 Dockerを使用することで、ソフトウェアのバージョンや依存関係に関する問題を最小限に抑えたクリーンで制御可能な環境を提供します。
モデルの重み
以下のリンクからモデルの重みをダウンロードできます。
- aiXcoder Base ダウンロード
- aiXcoder Instruct ダウンロード (近日公開...)
推論の例
コマンドラインでの実行
すぐに始めるには、コマンドラインから直接モデルの推論を実行できます。
torchrun --nproc_per_node 1 sess_megatron.py --model_dir "path/to/model_weights_dir"
"path/to/model_weights_dir"
を、ダウンロードしたモデルの重みの実際のパスに置き換えてください。
または、huggingfaceのtransformersを使用して推論を実行することもできます。
python sess_huggingface.py
Pythonスクリプトでの実行
あるいは、Pythonスクリプト内でプログラム的にモデルを呼び出すこともできます。この方法は、モデルをアプリケーションやワークフローに統合する際により柔軟性を提供します。以下は、その方法の簡単な例です。
💻 使用例
基本的な使用法
from sess_megatron import TestInference
infer = TestInference()
res = infer.run_infer(
# for FIM style input, code_string stands for prefix context
code_string="""# 快速排序算法""",
# for FIM style input, later_code stands for suffix context
later_code="\n",
# file_path should be a path from project to file
file_path="test.py",
# max num for generated tokens
max_new_tokens=256,
)
print(res)
"""output:
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[0]
less = [i for i in arr[1:] if i <= pivot]
greater = [i for i in arr[1:] if i > pivot]
return quick_sort(less) + [pivot] + quick_sort(greater)
# 测试
arr = [3, 2, 1, 4, 5]
print(quick_sort(arr)) # [1, 2, 3, 4, 5]
"""
高度な使用法
import torch
import sys
from hf_mini.utils import input_wrapper
from transformers import AutoModelForCausalLM, AutoTokenizer
device = "cuda" # the device to load the model onto
tokenizer = AutoTokenizer.from_pretrained("aiXcoder/aixcoder-7b-base")
model = AutoModelForCausalLM.from_pretrained("aiXcoder/aixcoder-7b-base", torch_dtype=torch.bfloat16)
text = input_wrapper(
# for FIM style input, code_string stands for prefix context
code_string="# 快速排序算法",
# for FIM style input, later_code stands for suffix context
later_code="\n# 测试\narr = [3, 2, 1, 4, 5]\nprint(quick_sort(arr)) # [1, 2, 3, 4, 5]",
# file_path should be a path from project to file
path="test.py"
)
if len(text) == 0:
sys.exit()
inputs = tokenizer(text, return_tensors="pt", return_token_type_ids=False)
inputs = inputs.to(device)
model.to(device)
outputs = model.generate(**inputs, max_new_tokens=256)
print(tokenizer.decode(outputs[0], skip_special_tokens=False))
"""output:
def quick_sort(arr):
# 如果数组长度小于等于1,直接返回
if len(arr) <= 1:
return arr
# 选择数组的第一个元素作为基准
pivot = arr[0]
# 初始化左右指针
left, right = 1, len(arr) - 1
# 循环直到左指针小于右指针
while left < right:
# 从右到左找到第一个小于基准的元素,与左指针元素交换
if arr[right] < pivot:
arr[left], arr[right] = arr[right], arr[left]
left += 1
# 从左到右找到第一个大于等于基准的元素,与右指针元素交换
if arr[left] >= pivot:
right -= 1
# 将基准元素与左指针元素交换
arr[left], arr[0] = arr[0], arr[left]
# 对左半部分进行递归排序
quick_sort(arr[:left])
# 对右半部分进行递归排序
quick_sort(arr[left + 1:])
return arr</s>
"""
📄 ライセンス
モデルの重みは、学術研究用途についてはモデルのライセンスの下でライセンスされています。商用利用の場合は、support@aiXcoder.comにメールを送信して申請してください。
謝辞
このプロジェクトを可能にしたオープンソースプロジェクトとデータセットのすべての貢献者に感謝します。
当社のコード大規模言語モデルに関心を寄せていただき、ありがとうございます。皆様からの貢献とフィードバックを楽しみにしています!



