模型概述
模型特點
模型能力
使用案例
🚀 aiXcoder-7B代碼大語言模型
aiXcoder-7B代碼大語言模型旨在理解和生成多種編程語言的代碼,在代碼補全、理解、生成等編程任務中表現出色,為開發者提供強大支持。
🏠 官方網站|🛠 VS Code插件|🛠 Jetbrains插件|Github項目
🚀 快速開始
環境要求
選項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模型的計算時間。
在繼續之前,請確保您的環境滿足CUDA要求,因為flash attention
利用了GPU加速。按照以下步驟安裝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(
# 對於FIM風格的輸入,code_string表示前綴上下文
code_string="""# 快速排序算法""",
# 對於FIM風格的輸入,later_code表示後綴上下文
later_code="\n",
# file_path應該是從項目到文件的路徑
file_path="test.py",
# 生成令牌的最大數量
max_new_tokens=256,
)
print(res)
"""輸出:
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" # 加載模型的設備
tokenizer = AutoTokenizer.from_pretrained("aiXcoder/aixcoder-7b-base")
model = AutoModelForCausalLM.from_pretrained("aiXcoder/aixcoder-7b-base", torch_dtype=torch.bfloat16)
text = input_wrapper(
# 對於FIM風格的輸入,code_string表示前綴上下文
code_string="# 快速排序算法",
# 對於FIM風格的輸入,later_code表示後綴上下文
later_code="\n# 測試\narr = [3, 2, 1, 4, 5]\nprint(quick_sort(arr)) # [1, 2, 3, 4, 5]",
# file_path應該是從項目到文件的路徑
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))
"""輸出:
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>
"""
✨ 主要特性
隨著代碼大模型的能力逐漸被髮掘,aiXcoder一直在思考如何讓這些模型在實際開發場景中更具價值。為此,我們開源了aiXcoder 7B Base,該模型在1.2T唯一標記上進行了廣泛訓練,並且模型的預訓練任務和上下文信息是針對實際代碼生成場景進行獨特設計的。
aiXcoder 7B Base在所有類似參數規模的模型中,在代碼補全場景中表現最為出色,並且在多語言nl2code基準測試的平均性能上超過了codellama 34B和StarCoder2 15B等主流模型。
在我們持續探索代碼大模型應用的過程中,aiXcoder 7B Base的發佈是一個重要的里程碑。當前版本的aiXcoder 7B Base是一個基礎模型,專注於提高代碼補全和代碼生成任務的效率和準確性,旨在為開發者在這些場景中提供強大的支持。需要注意的是,此版本尚未進行特定的指令調優,這意味著它可能尚未在諸如測試用例生成和代碼調試等專門的高級任務中提供最佳性能。
然而,我們已經在計劃進一步開發aiXcoder模型系列。在不久的將來,我們旨在發佈經過精心指令調優的新版本模型,以支持更廣泛的編程任務,包括但不限於測試用例生成和代碼調試。通過這些經過指令調優的模型,我們期望為開發者提供更全面、更深入的編程支持,幫助他們在軟件開發的各個階段實現最高效率。
📄 許可證
模型權重根據模型許可證供學術研究使用;如需商業使用,請發送電子郵件至support@aiXcoder.com進行申請。
🙏 致謝
我們要感謝所有為開源項目和數據集做出貢獻的人,正是他們的工作使得本項目成為可能。
感謝您對我們的代碼大語言模型的關注。我們期待您的貢獻和反饋!



