StarCoder - 源代码大模型

StarCoder 是一种在源代码和自然语言文本上训练的语言模型 (LM)。 它的训练数据包含 80 多种不同的编程语言以及从 github 问题和提交以及笔记本中提取的文本。

StarCoder 是在 github 代码上训练的,因此它可以用来执行代码生成。 更准确地说,模型可以完成一个功能的实现,或者在一行代码中推断出后面的字符。 这可以在 hugging faces 的transformers库的帮助下完成。

在这里插入图片描述

推荐:用 NSDT设计器 快速搭建可编程3D场景。

1、StarCoder快速上手

首先,我们必须安装 requirements.txt 中列出的所有库:

pip install -r requirements.txt

StarCoder代码生成流水线如下:

from transformers import AutoModelForCausalLM, AutoTokenizer

checkpoint = "bigcode/starcoder"
device = "cuda" # for GPU usage or "cpu" for CPU usage

tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = AutoModelForCausalLM.from_pretrained(checkpoint).to(device)

inputs = tokenizer.encode("def print_hello_world():", return_tensors="pt").to(device)
outputs = model.generate(inputs)
print(tokenizer.decode(outputs[0]))

或:

from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
checkpoint = "bigcode/starcoder"

model = AutoModelForCausalLM.from_pretrained(checkpoint)
tokenizer = AutoTokenizer.from_pretrained(checkpoint)

pipe = pipeline("text-generation", model=model, tokenizer=tokenizer, device=0)
print( pipe("def hello():") )

StarCoder文本生成推理命令如下:

docker run --gpus '"device:0"' -p 8080:80 -v $PWD/data:/data -e HUGGING_FACE_HUB_TOKEN=<YOUR BIGCODE ENABLED TOKEN> -e HF_HUB_ENABLE_HF_TRANSFER=0 -d  ghcr.io/huggingface/text-generation-inference:sha-880a76e --model-id bigcode/starcoder --max-total-tokens 8192

有关详细信息,请参阅此处

2、StarCoder微调

在这里,我们展示了如何针对特定的下游任务微调此 LM。

首先新建conda环境并激活:

conda create -n env
conda activate env

从此处安装与你的 cuda 版本兼容的 pytorch 版本,以下命令适用于 cuda 11.6:

conda install pytorch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 pytorch-cuda=11.6 -c pytorch -c nvidia

安装transformers和peft库:

conda install -c huggingface transformers 
pip install git+https://github.com/huggingface/peft.git

请注意,你可以使用如下命令安装最新稳定版本的transformers库:

pip install git+https://github.com/huggingface/transformers

安装数据集、加速器和huggingface_hub:

conda install -c huggingface -c conda-forge datasets
conda install -c conda-forge accelerate
conda install -c conda-forge huggingface_hub

最后,安装 bitsandbytes 和 wandb库:

pip install bitsandbytes
pip install wandb

要获得带有描述的完整参数列表,你可以在任何脚本上运行以下命令:

python scripts/some_script.py --help

在运行任何脚本之前,请确保你已登录并且可以推送到hub:

huggingface-cli login

确保你已登录 wandb:

wandb login

现在一切都完成了,你可以克隆存储库并进入相应的目录。

2.1 数据集

StarCoder 可以微调来实现多个下游任务。 我们在这里的兴趣是微调 StarCoder 以使其遵循指令。 指令微调最近引起了很多关注,因为它提出了一个简单的框架,可以教授语言模型使其输出与人类需求保持一致。 该过程需要质量指令数据集的可用性,其中包含多个指令 - 答案对。 不幸的是,这样的数据集并不普遍,但多亏了 Hugging Face🤗 的数据集库,我们可以访问一些很好的代理。 为了廉价高效地进行微调,我们使用了 Hugging Face🤗 的 PEFT 以及 Tim Dettmers 的 bitsandbytes。

Stack Exchange 是一个知名的问答网站网络,涉及不同领域的主题。 这是一个用户可以提出问题并从其他用户那里获得答案的地方。 这些答案根据其质量进行评分和排名。 Stack exchange instructions 是一个数据集,它是通过抓取网站获得的,目的是建立一个问答对的集合。 然后可以在该数据集上微调语言模型,使其产生强大而多样的问答技能。

要执行微调脚本,请运行以下命令:

python finetune/finetune.py \
  --model_path="bigcode/starcoder"\
  --dataset_name="ArmelR/stack-exchange-instruction"\
  --subset="data/finetune"\
  --split="train"\
  --size_valid_set 10000\
  --streaming\
  --seq_length 2048\
  --max_steps 1000\
  --batch_size 1\
  --input_column_name="question"\
  --output_column_name="response"\ 
  --gradient_accumulation_steps 16\
  --learning_rate 1e-4\
  --lr_scheduler_type="cosine"\
  --num_warmup_steps 100\
  --weight_decay 0.05\
  --output_dir="./checkpoints" \

使用流式传输时,SE 数据集的大小更易于管理。 我们还必须精确划分所使用的数据集。 有关详细信息,请查看 🤗 上的数据集页面。 同样,我们可以修改命令以说明 GPU 的可用性:

python -m torch.distributed.launch \
  --nproc_per_node number_of_gpus finetune/finetune.py \
  --model_path="bigcode/starcoder"\
  --dataset_name="ArmelR/stack-exchange-instruction"\
  --subset="data/finetune"\
  --split="train"\
  --size_valid_set 10000\
  --streaming \
  --seq_length 2048\
  --max_steps 1000\
  --batch_size 1\
  --input_column_name="question"\
  --output_column_name="response"\ 
  --gradient_accumulation_steps 16\
  --learning_rate 1e-4\
  --lr_scheduler_type="cosine"\
  --num_warmup_steps 100\
  --weight_decay 0.05\
  --output_dir="./checkpoints" \

2.2 合并 PEFT 适配层

如果使用 PEFT 训练模型,并且要运行推理/评估,则需要将适配器层与基础模型合并。 为此,请运行:

python finetune/merge_peft_adapters.py --model_name_or_path model_to_merge --peft_model_path model_checkpoint


# Push merged model to the Hub
python finetune/merge_peft_adapters.py --model_name_or_path model_to_merge --peft_model_path model_checkpoint --push_to_hub

例如:

python finetune/merge_peft_adapters.py --model_name_or_path bigcode/starcoder --peft_model_path checkpoints/checkpoint-1000 --push_to_hub

原文链接:StarCoder - BimAnt

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值