代码仓库地址:
安装与测试:
- 准备环境
conda create -n aixcoder-7b python=3.10
conda activate aixcoder-7b
pip3 install -r requirements.txt
pip3 install torch==1.13.0+cu117 torchvision==0.14.0+cu117 torchaudio==0.13.0 --extra-index-url https://download.pytorch.org/whl/cu117
- 依赖项
# flash-attention
git clone https://github.com/Dao-AILab/flash-attention.git
cd flash-attention
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.7/lib64
MAX_JOBS=8 python3 setup.py install
- 下载模型文件
参考文章进行配置
hdf.sh aiXcoder/aixcoder-7b-base --tool aria2c -x 10
- 运行demo
export CUDA_VISIBLE_DEVICES=4,6,7
torchrun --nproc_per_node 1 sess_megatron.py --model_dir ./aixcoder-7b-base/
修改sess_megatron.py 中的代码,即可让模型生成不同的代码。
- 实战
本次我们让模型来为我们生成一个函数,这个函数可以返回一个数组中最大的前三项。
aiXcoder-7B给出的答案是
def max_three(nums):
# 如果数组长度小于等于3,直接返回数组
if len(nums) <= 3:
return nums
# 初始化最大值列表
max_nums = []
# 遍历数组
for num in nums:
# 如果最大值列表长度小于3,或者当前数字大于最大值列表中的任何一个数字
if len(max_nums) < 3 or num > max(max_nums):
# 在最大值列表中找到第一个小于当前数字的数字的位置
i = 0
while i < len(max_nums) and num >= max_nums[i]:
i += 1
# 在最大值列表中插入当前数字
max_nums.insert(i, num)
# 如果最大值列表长度大于3,删除最大值列表的最后一个数字
if len(max_nums) > 3:
max_nums.pop()
# 返回最大值列表
return max_nums
Stable Code给出的答案是
import heapq
def find_max_three(arr):
if len(arr) < 3:
return sorted(arr, reverse=True)
heap = arr[:3]
heapq.heapify(heap)
for num in arr[3:]:
if num > heap[0]:
heapq.heappop(heap)
heapq.heappush(heap, num)
return heap[::-1]
# Example usage:
arr = [1, 5, 8, 3, 9, 2, 6, 7, 4]
print(find_max_three(arr)) # Output: [9, 8, 7]
实际动手运行一下就会发现,两者都不太对,但是aiXcoder更加离谱一些。。。
- 关于插件
aiXcoder也提供了VSCode和JetBrains的插件,个人不建议使用,它无法使用自己部署的后端服务,只能能录到官方服务器来使用,鉴于目前个人部署的表现情况,如果使用插件,大概率你的代码会成为他的训练数据。只是一点猜测。