许可证:llama2
模型索引:
- 名称:Phind-CodeLlama-34B-v1
结果:
- 任务:
类型:文本生成
数据集:
类型:openai_humaneval
名称:HumanEval
指标:
- 名称:pass@1
类型:pass@1
值:69.5%
已验证:否
标签:
- Code Llama
Phind-CodeLlama-34B-Python-v1
我们在内部Phind数据集上对CodeLlama-34B和CodeLlama-34B-Python进行了微调,使其在HumanEval上的pass@1分别达到67.6%和69.5%。GPT-4的表现为67%。我们采用了OpenAI的去污染方法处理数据集,以确保结果的有效性。
更多细节请参阅我们的博客文章。
模型详情
该模型基于CodeLlama-34B-Python微调,在HumanEval上实现了69.5%的pass@1。
数据集详情
我们使用了一个包含约8万个高质量编程问题及解决方案的专有数据集进行微调。该数据集由指令-答案对组成,而非代码补全示例,因此其结构与HumanEval不同。Phind模型训练了2个周期,共展示约16万个示例。未使用LoRA技术,两个模型均为原生微调。我们采用DeepSpeed ZeRO 3和Flash Attention 2技术,在32台A100-80GB GPU上耗时3小时完成训练,序列长度为4096个标记。
快速开始
确保安装最新版Transformers:
pip install git+https://github.com/huggingface/transformers.git
提示方式
请注意:该模型经过指令微调,但未针对对话优化。
请勿使用Llama对话标记,只需明确任务并在结尾添加"\n: "。
示例:
实现一个链表:\n
复现HumanEval结果
运行以下代码:
from transformers import AutoTokenizer, LlamaForCausalLM
from human_eval.data import write_jsonl, read_problems
from tqdm import tqdm
model_path = "Phind/Phind-CodeLlama-34B-v1"
model = LlamaForCausalLM.from_pretrained(model_path, device_map="auto")
tokenizer = AutoTokenizer.from_pretrained(model_path)
def generate_one_completion(prompt: str):
tokenizer.pad_token = tokenizer.eos_token
inputs = tokenizer(prompt, return_tensors="pt", truncation=True, max_length=4096)
generate_ids = model.generate(inputs.input_ids.to("cuda"), max_new_tokens=256, do_sample=True, top_p=0.75, top_k=40, temperature=0.1)
completion = tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
return completion.replace(prompt, "").split("\n\n\n")[0]
problems = read_problems()
samples = [dict(task_id=task_id, completion=generate_one_completion(problems[task_id]["prompt"])) for task_id in tqdm(problems)]
write_jsonl("samples.jsonl", samples)
偏差、风险与限制
该模型仅经过有限测试,实际部署前需进行更多安全性评估。
训练详情
- 硬件类型:32台A100-80GB
- 耗时:90 GPU小时
- 云服务商:AWS
- 计算区域:us-east-1