Project Icon

starcoder2-self-align

自我校准的代码生成大型语言模型

StarCoder2-15B-Instruct-v0.1是一款完全自我校准的代码生成大型语言模型,采用公开透明的工作流程,无需人工注释或专有数据。模型通过生成大量指令-响应对,进一步微调自身。专为Python代码生成任务优化,支持语法验证和定制排序。提供详细的训练和评估信息,包括数据生成、模型优化和性能验证,适用于多种编程任务。模型强调透明度和开放许可,提升代码生成的准确性和效率。

StarCoder2-Instruct:完全透明且许可的自对齐代码生成

⭐️ 关于 | 🚀 快速开始 | 📚 数据生成管道 | 🧑‍💻 训练细节 | 📊 评估 | ⚠️ 限制

Banner

关于

我们介绍了 StarCoder2-15B-Instruct-v0.1,这是第一个完全自对齐的代码大语言模型(LLM),通过完全许可和透明的管道进行训练。我们的开源管道使用 StarCoder2-15B 生成数千对指令-响应对,这些对用于微调 StarCoder-15B 本身,而不需要人类注释或来自巨大的专有 LLM 的提取数据。

self-alignment pipeline

快速开始

以下是使用 transformers 库快速入门 StarCoder2-15B-Instruct-v0.1 的示例:

import transformers
import torch

pipeline = transformers.pipeline(
    model="bigcode/starcoder2-15b-instruct-v0.1",
    task="text-generation",
    torch_dtype=torch.bfloat16,
    device_map="auto",
)

def respond(instruction: str, response_prefix: str) -> str:
    messages = [{"role": "user", "content": instruction}]
    prompt = pipeline.tokenizer.apply_chat_template(messages, tokenize=False)
    prompt += response_prefix

    teminators = [
        pipeline.tokenizer.eos_token_id,
        pipeline.tokenizer.convert_tokens_to_ids("###"),
    ]

    result = pipeline(
        prompt,
        max_length=256,
        num_return_sequences=1,
        do_sample=False,
        eos_token_id=teminators,
        pad_token_id=pipeline.tokenizer.eos_token_id,
        truncation=True,
    )
    response = response_prefix + result[0]["generated_text"][len(prompt) :].split("###")[0].rstrip()
    return response


instruction = "Write a quicksort function in Python with type hints and a 'less_than' parameter for custom sorting criteria."
response_prefix = ""

print(respond(instruction, response_prefix))

数据生成管道

运行 pip install -e . 首先在本地安装这个包。查看 seed_gathering 了解我们如何收集种子数据的详细信息。

我们使用 vLLM 的 OpenAI 兼容服务器 进行数据生成。因此,在运行以下命令之前,请确保 vLLM 服务器正在运行,并设置相关的 openai 环境变量。

例如,您可以使用 docker 启动 vLLM 服务器:

docker run --gpus '"device=0"' \
    -v $HF_HOME:/root/.cache/huggingface \                            
    -p 10000:8000 \
    --ipc=host \
    vllm/vllm-openai:v0.3.3 \
    --model bigcode/starcoder2-15b \
    --tensor-parallel-size 1 --dtype bfloat16

然后设置环境变量如下:

export OPENAI_API_KEY="EMPTY"
export OPENAI_BASE_URL="http://localhost:10000/v1/"
从片段到概念生成
python src/star_align/self_ossinstruct.py \
    --instruct_mode "S->C" \
    --seed_data_files /path/to/seeds.jsonl \
    --max_new_data 50000 \
    --tag concept_gen \
    --temperature 0.7 \
    --seed_code_start_index 0 \
    --model bigcode/starcoder2-15b \
    --num_fewshots 8 \
    --num_batched_requests 32 \
    --num_sample_per_request 1
从概念到指令生成
python src/star_align/self_ossinstruct.py \
    --instruct_mode "C->I" \
    --seed_data_files /path/to/concepts.jsonl \
    --max_new_data 50000 \
    --tag instruction_gen \
    --temperature 0.7 \
    --seed_code_start_index 0 \
    --model bigcode/starcoder2-15b \
    --num_fewshots 8 \
    --num_sample_per_request 1 \
    --num_batched_request 32
从指令到响应(带自验证代码)生成
python src/star_align/self_ossinstruct.py \
    --instruct_mode "I->R" \
    --seed_data_files path/to/instructions.jsonl  \
    --max_new_data 50000 \
    --tag response_gen \
    --seed_code_start_index 0 \
    --model bigcode/starcoder2-15b \
    --num_fewshots 1 \
    --num_batched_request 8 \
    --num_sample_per_request 10 \
    --temperature 0.7
执行筛选

警告: 尽管我们实现了可靠性保护,还是强烈建议在沙箱环境中运行执行。以下命令默认不提供沙箱功能。

python src/star_align/execution_filter.py --response_path /path/to/response.jsonl --result_path /path/to/filtered.jsonl
# 当前实现可能导致死锁。
# 如果遇到死锁,手动执行 `ps -ef | grep execution_filter` 然后杀死卡住的进程。
# 请注意,filtered.jsonl 可能包含多个相同指令的通过样本,需要进一步选择。

要使用 Docker 容器执行代码,您首先需要 git submodule update --init --recursive 克隆服务器,然后运行:

pushd ./src/star_align/code_exec_server
./build_and_run.sh
popd
python src/star_align/execution_filter.py --response_path /path/to/response.jsonl --result_path /path/to/filtered.jsonl --container_server http://127.0.0.1:8000
数据清理和选择
RAW=1 python src/star_align/sanitize_data.py /path/to/filtered.jsonl /path/to/sanitized.jsonl
python src/star_align/clean_data.py --data_files /path/to/sanitized.jsonl --output_file /path/to/sanitized.jsonl --diversify_func_names
SMART=1 python src/star_align/sanitize_data.py /path/to/sanitized.jsonl /path/to/sanitized.jsonl

训练细节

运行 pip install -e . 首先安装这个包。并安装 Flash Attention 以加速训练。

超参数

  • 优化器: Adafactor
  • 学习率: 1e-5
  • 周期: 4
  • 批次大小: 64
  • 预热比: 0.05
  • 调度器: 线性
  • 序列长度: 1280
  • 丢弃率:未应用

硬件

1 x NVIDIA A100 80GB。是的,只需要一个 A100 就能微调 StarCoder2-15B!

脚本

以下脚本从基础 StarCoder2-15B 模型微调 StarCoder2-15B-Instruct-v0.1。/path/to/dataset.jsonl 是我们生成的 50k 数据集 的 JSONL 格式。您可以将数据集转储为 JSONL 以适合训练脚本。

点击查看训练脚本

注意:StarCoder2-15B 默认设置丢弃率值为 0.1。我们在微调中没有应用丢弃,因此设置为 0.0。

MODEL_KEY=bigcode/starcoder2-15b
LR=1e-5
EPOCH=4
SEQ_LEN=1280
WARMUP_RATIO=0.05
OUTPUT_DIR=/path/to/output_model
DATASET_FILE=/path/to/50k-dataset.jsonl
accelerate launch -m star_align.train \
    --model_key $MODEL_KEY \
    --model_name_or_path $MODEL_KEY \
    --use_flash_attention True \
    --datafile_paths $DATASET_FILE \
    --output_dir $OUTPUT_DIR \
    --bf16 True \
    --num_train_epochs $EPOCH \
    --max_training_seq_length $SEQ_LEN \
    --pad_to_max_length False \
    --per_device_train_batch_size 1 \
    --gradient_accumulation_steps 64 \
    --group_by_length False \
    --ddp_find_unused_parameters False \
    --logging_steps 1 \
    --log_level info \
    --optim adafactor \
    --max_grad_norm -1 \
    --warmup_ratio $WARMUP_RATIO \
    --learning_rate $LR \
    --lr_scheduler_type linear \
    --attention_dropout 0.0 \
    --residual_dropout 0.0 \
    --embedding_dropout 0.0

EvalPlus、LiveCodeBench 和 DS-1000 上的评估

查看 评估 了解更多细节。

EvalPlus

LiveCodeBench and DS-1000

偏见、风险和限制

StarCoder2-15B-Instruct-v0.1 主要针对 Python 代码生成任务进行了微调,这些任务可以通过执行来验证,这可能导致某些偏见和限制。例如,模型可能不会严格遵守指令中规定的输出格式。在这些情况下,提供一个 响应前缀一次示例 可以帮助引导模型的输出。此外,模型在其他编程语言和域外代码任务上可能存在局限性。

该模型还继承了其基础模型 StarCoder2-15B 的偏见、风险和限制。了解更多信息,请参阅 StarCoder2-15B 模型卡

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

稿定AI

稿定设计 是一个多功能的在线设计和创意平台,提供广泛的设计工具和资源,以满足不同用户的需求。从专业的图形设计师到普通用户,无论是进行图片处理、智能抠图、H5页面制作还是视频剪辑,稿定设计都能提供简单、高效的解决方案。该平台以其用户友好的界面和强大的功能集合,帮助用户轻松实现创意设计。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号