模型简介
模型特点
模型能力
使用案例
🚀 replit-code-v1-3b
replit-code-v1-3b
是一款专注于代码补全的 27 亿参数因果语言模型。它基于特定数据集训练,能为开发者提供代码生成支持,助力高效编程。
🚀 快速开始
首先,你需要安装以下依赖的最新版本:
einops
sentencepiece
torch
transformers
然后,你可以按如下方式加载模型:
from transformers import AutoModelForCausalLM
# load model
model = AutoModelForCausalLM.from_pretrained('replit/replit-code-v1-3b', trust_remote_code=True)
若要在支持 BF16 精度的 GPU 上使用 FlashAttention 的优化 Triton 实现,需先安装以下依赖:
flash-attn==0.2.8
triton==2.0.0.dev20221202
接着,将模型移至 bfloat16
并按如下方式使用:
from transformers import AutoModelForCausalLM
import torch
# load model
model = AutoModelForCausalLM.from_pretrained('replit/replit-code-v1-3b', trust_remote_code=True, attn_impl='triton')
model.to(device='cuda:0', dtype=torch.bfloat16)
# forward pass
x = torch.tensor([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
x = x.to(device='cuda:0')
y = model(x)
注意,由于 ReplitLM 并非 Transformers 库中的类,因此在 from_pretrained
方法中需传入 trust_remote_code=True
。
✨ 主要特性
- 多语言支持:该模型在训练中涵盖了 20 种不同语言,按训练时使用的标记数量降序排列为:
Markdown
、Java
、JavaScript
、Python
、TypeScript
、PHP
、SQL
、JSX
、reStructuredText
、Rust
、C
、CSS
、Go
、C++
、HTML
、Vue
、Ruby
、Jupyter Notebook
、R
、Shell
。 - 大规模训练:模型基于 Stack Dedup v1.2 数据集 的一个子集进行训练。训练数据集总共包含 1750 亿个标记,经过 3 个训练周期,
replit-code-v1-3b
模型总共在 5250 亿 个标记上进行了训练(每个参数约 195 个标记)。 - 先进技术加持:采用了诸如 Flash Attention 实现快速训练和推理、AliBi 位置嵌入 以支持推理时可变的上下文长度、LionW 优化器 等先进的大语言模型技术。
💻 使用示例
基础用法
from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained('replit/replit-code-v1-3b', trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained('replit/replit-code-v1-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)
# decoding, clean_up_tokenization_spaces=False to ensure syntactical correctness
generated_code = tokenizer.decode(y[0], skip_special_tokens=True, clean_up_tokenization_spaces=False)
print(generated_code)
高级用法
# 此示例展示了如何在支持 BF16 精度的 GPU 上使用优化的 FlashAttention 实现
from transformers import AutoModelForCausalLM
import torch
# load model
model = AutoModelForCausalLM.from_pretrained('replit/replit-code-v1-3b', trust_remote_code=True, attn_impl='triton')
model.to(device='cuda:0', dtype=torch.bfloat16)
x = torch.tensor([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
x = x.to(device='cuda:0')
y = model(x)
print(y)
📚 详细文档
分词器
我们训练了一个自定义的 SentencePiece Unigram 分词器,该分词器针对代码进行了优化,词汇表包含 32768 个标记。
使用此分词器需要安装 sentencepiece
库。可以按如下方式使用分词器:
from transformers import AutoTokenizer
# load tokenizer
tokenizer = AutoTokenizer.from_pretrained('replit/replit-code-v1-3b', trust_remote_code=True)
# single input encoding + generation
x = tokenizer.encode('def hello():\n print("hello world")\n', return_tensors='pt')
y = model.generate(x)
# decoding, clean_up_tokenization_spaces=False to ensure syntactical correctness
generated_code = tokenizer.decode(y[0], skip_special_tokens=True, clean_up_tokenization_spaces=False)
print(generated_code)
注意:
- 由于 ReplitLM 并非 Transformers 库中的类,因此在
from_pretrained
方法中需传入trust_remote_code=True
。 clean_up_tokenization_spaces=False
是为了避免在输出中删除空格,因为这会影响生成代码的语法正确性。
代码生成
你可以使用 transformers
库按如下方式生成代码:
from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained('replit/replit-code-v1-3b', trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained('replit/replit-code-v1-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)
# decoding, clean_up_tokenization_spaces=False to ensure syntactical correctness
generated_code = tokenizer.decode(y[0], skip_special_tokens=True, clean_up_tokenization_spaces=False)
print(generated_code)
你可以尝试不同的解码方法和参数,以获得最适合你用例的结果。
后处理
请注意,与所有代码生成模型一样,对生成的代码进行后处理非常重要。特别推荐以下后处理步骤:
- 遇到 EOS 标记时停止生成。
- 去除尾部空格。
- 根据你的补全用例将
max_tokens
设置为合理的值。 - 当
max_tokens
大于预期生成代码的长度时,将生成结果截断到诸如return
、def
、"```"、"\n\n\n
" 等停止词,以避免生成不完整的代码。
🔧 技术细节
replit-code-v1-3b
模型在 MosaicML 平台上使用 256 个 A100 - 40GB GPU 进行训练,借助了他们最新的 LLM 示例仓库。
模型在 Stack Dedup v1.2 数据集 的一个子集上进行训练,训练混合集中包含 20 种不同语言。训练数据集总共包含 1750 亿个标记,经过 3 个训练周期,模型总共在 5250 亿个标记上进行了训练(每个参数约 195 个标记)。
该模型采用了一系列先进的大语言模型技术,如 Flash Attention 实现快速训练和推理、AliBi 位置嵌入 以支持推理时可变的上下文长度、LionW 优化器 等。
📄 许可证
模型检查点和词汇表文件遵循知识共享许可协议(CC BY - SA 4.0)。在该许可下,你必须向 Replit 致谢,提供许可链接,并说明是否进行了修改。你可以以任何合理的方式进行,但不得暗示 Replit 认可你或你的使用方式。
模型信息表格
属性 | 详情 |
---|---|
模型类型 | 专注于代码补全的因果语言模型 |
训练数据 | 来自 Stack Dedup v1.2 数据集 的子集,包含 20 种语言,共 1750 亿个标记,经过 3 个训练周期,模型总共在 5250 亿个标记上训练 |
重要提示
⚠️ 重要提示
预训练数据集即使在应用数据清理过滤器后,仍可能包含冒犯性或不适当的内容,此类内容可能会反映在模型生成的文本中。建议用户在生产系统中使用时保持合理的谨慎。请勿将其用于任何可能对个人或群体造成伤害或困扰的应用程序。
💡 使用建议
尝试不同的解码方法和参数,以获得最适合你用例的结果。同时,对生成的代码进行后处理,如遇到 EOS 标记时停止生成、去除尾部空格、合理设置
max_tokens
以及截断生成结果到停止词等,以确保生成代码的质量。
模型哈希
5bc28ce32c6f9aec935ead7b60ea1c46
此模型由 Replit, Inc. 开发。若你对模型有任何疑问或建议,请在社区板块发表。



