🚀 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提供了一个干净、可控的环境,可最大程度减少与软件版本和依赖项相关的问题。
模型权重
你可以从以下链接下载模型权重:
推理示例
命令行执行
为了快速开始,你可以直接从命令行运行模型推理:
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(
code_string="""# 快速排序算法""",
later_code="\n",
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(
code_string="# 快速排序算法",
later_code="\n# 测试\narr = [3, 2, 1, 4, 5]\nprint(quick_sort(arr)) # [1, 2, 3, 4, 5]",
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在所有类似参数规模的模型中,在代码补全场景下表现最为出色,并且在多语言自然语言到代码基准测试的平均性能上也超过了codellama 34B和StarCoder2 15B等主流模型。
在我们持续探索代码大模型应用的过程中,aiXcoder 7B Base的发布是一个重要的里程碑。当前版本的aiXcoder 7B Base是一个基础模型,专注于提高代码补全和代码生成任务的效率和准确性,旨在为开发者在这些场景中提供强大的支持。需要注意的是,此版本尚未进行特定的指令调优,这意味着它可能尚未在测试用例生成和代码调试等专业高级任务中提供最佳性能。
然而,我们已经在计划进一步开发aiXcoder模型系列。在不久的将来,我们的目标是发布经过精心指令调优的新版本模型,适用于更广泛的编程任务,包括但不限于测试用例生成和代码调试。通过这些经过指令调优的模型,我们期望为开发者提供更全面、更深入的编程支持,帮助他们在软件开发的各个阶段实现最高效率。
📄 许可证
模型权重根据模型许可证供学术研究使用;如需商业使用,请发送电子邮件至support@aiXcoder.com进行申请。
🙏 致谢
我们要感谢所有为开源项目和数据集做出贡献的人,正是他们的工作使得本项目成为可能。
感谢你对我们的代码大语言模型的关注。我们期待你的贡献和反馈!