Replit Code V-1.5 3B 项目介绍
Replit Code V-1.5 3B 是一个由 Replit, Inc. 开发的因果语言模型,专注于代码补全。这个模型具备 3.3 亿个参数,为提升编程效率提供了优秀的支持。
模型描述
Replit Code V-1.5 使用 bfloat16
精度进行训练,处理了 1 万亿个代码标记,其中大约有两百亿个标记经过五个周期的训练,包括线性的冷却周期。模型支持从 Bigcode 的 Stack Dedup 数据集和 RedPajama StackExchange 数据集中挑选的样本,其中包含 30 种编程语言的代码。这 30 种编程语言为:
Java, JavaScript, C, PHP, Python, C++, C#, TypeScript, Go, CSS, HTML, Rust, Ruby, Swift, Scala, Shell, Lua, Perl, Haskell, JSX, Julia, Common Lisp, OCaml, Solidity, Scheme, R, Zig, SQL, Racket, D
模型的上下文长度为 4096 个标记,使用了 GPTNeoX 的分词器,并配合经过自定义训练和优化的 32768 个标记的词汇表。这种定制的词汇表在保持或提升我们的训练语料库覆盖范围的前提下,实现了个位数百分比的压缩。
模型是在 MosaicML 平台上,并利用其基于 PyTorch 的 LLM Foundry 和 Composer 训练库,使用 128 台 H100-80GB 的 GPU 进行训练。
依赖项
使用该模型需要安装以下依赖的最新版本:
einops
torch
transformers
如何使用
生成代码
用户可以使用 transformers
库生成代码,以下是简单的示例代码:
from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained('replit/replit-code-v1_5-3b', trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained('replit/replit-code-v1_5-3b', trust_remote_code=True)
x = tokenizer.encode('def fibonacci(n): ', return_tensors='pt')
y = model.generate(x, max_length=100, do_sample=True, top_p=0.95, top_k=4, temperature=0.2, num_return_sequences=1, eos_token_id=tokenizer.eos_token_id)
# 解码
generated_code = tokenizer.decode(y[0], skip_special_tokens=True, clean_up_tokenization_spaces=False)
print(generated_code)
用户可以尝试不同的解码方法和参数,以获取最佳结果。
使用 Triton 的快速注意力实现
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, AutoConfig
config = AutoConfig.from_pretrained(
"replit/replit-code-v1_5-3b",
trust_remote_code=True
)
config.attn_config['attn_impl'] = 'triton'
# 加载模型
tokenizer = AutoTokenizer.from_pretrained('replit/replit-code-v1_5-3b', trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained('replit/replit-code-v1_5-3b', config=config, trust_remote_code=True)
model.to(device='cuda:0', dtype=torch.bfloat16)
# 前向传递
x = tokenizer.encode('def fibonacci(n): ', return_tensors='pt').to(device='cuda:0')
x = x.to(device='cuda:0')
y = model.generate(x, max_length=100, do_sample=True, top_p=0.95, top_k=4, temperature=0.2, num_return_sequences=1, eos_token_id=tokenizer.eos_token_id)
# 解码
generated_code = tokenizer.decode(y[0], skip_special_tokens=True, clean_up_tokenization_spaces=False)
print(generated_code)
我们建议用户在不同的解码方法中尝试和调整 temperature
和 repetition_penalty
以在具体使用场景中获得最佳性能。
预期用途
Replit 期望这个模型能作为基础模型,被任何人用于特定应用的微调开发,且在商业使用方面没有严格限制。此模型专为代码补全任务而训练。
限制
尽管在数据清理以及过滤不当内容和脏话方面进行了努力,预训练数据集中仍可能会有不当或不适宜的内容。因此可能反映在模型生成的文本中。用户在生产系统中使用时应保持合理谨慎。请勿将其用于可能会对个人或团体造成伤害或困扰的应用程序。