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