模型:
replit/replit-code-v1-3b
由Replit,Inc.开发
?? Test it on our Demo Space! ??
⚙️ Fine-tuning and Instruct-tuning guides ⚙️
replit-code-v1-3b是一个2.7B的因果语言模型,专注于代码补全。模型在 Stack Dedup v1.2 dataset 的子集上进行了训练。
训练混合包括20种不同的语言,按标记数降序排列:Markdown,Java,JavaScript,Python,TypeScript,PHP,SQL,JSX,reStructuredText,Rust,C,CSS,Go,C ++,HTML,Vue,Ruby,Jupyter Notebook,R,Shell。总共,训练数据集包含175B个标记,它们在3个时期内重复进行训练 - 总共,replit-code-v1-3b已经在525B个标记(每个参数约195个标记)上进行了训练。
模型已经在 MosaicML 平台上使用256 x A100-40GB GPU进行训练,利用了它们最新的 LLM examples repo 。 replit-code-v1-3b采用了最先进的LLM技术,例如: Flash Attention 可实现快速训练和推理, AliBi positional embeddings 可在推理时支持可变上下文长度, LionW optimizer 等。
Replit打算使此模型可供任何人用作应用特定微调的基础模型,没有对商业使用的严格限制。
预训练数据集可能包含冒犯或不恰当的内容,即使应用了数据清洗过滤器,这些内容可能在模型生成的文本中反映出来。我们建议用户在使用生产系统时保持合理的谨慎。请勿将其用于可能对个人或集体造成伤害或困扰的任何应用。
模型检查点和词汇文件的许可证属于知识共享许可证(CC BY-SA-4.0)。根据此许可证,您必须给予Replit信用,提供许可证的链接,并指示是否进行了更改。您可以以任何合理的方式执行此操作,但不能以任何方式暗示Replit代言您或您的使用方式。
源代码文件(*.py)根据Apache 2.0许可证获得许可。
关于模型的问题和评论,请在社区部分发布。
首先,您需要安装以下依赖项的最新版本:
einops sentencepiece torch transformers
然后可以按以下方式加载模型:
from transformers import AutoModelForCausalLM # load model model = AutoModelForCausalLM.from_pretrained('replit/replit-code-v1-3b', trust_remote_code=True)
要使用基于Triton实现的FlashAttention的带有BF16精度的GPU,首先安装以下依赖项:
flash-attn==0.2.8 triton==2.0.0.dev20221202
然后,将模型移至bfloat16并按以下方式使用它:
from transformers import AutoModelForCausalLM, AutoConfig config = AutoConfig.from_pretrained( "replit/replit-code-v1-3b", trust_remote_code=True ) config.attn_config['attn_impl'] = 'triton' # load model model = AutoModelForCausalLM.from_pretrained('replit/replit-code-v1-3b', config=config, trust_remote_code=True) 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)
注意,将trust_remote_code=True传递给from_pretrained方法,因为ReplitLM不是 Transformers 库中的类。
我们训练了一个定制的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)
注意:
您可以使用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)
尝试不同的解码方法和参数,以获得适合您使用情况的最佳结果。
请注意,与所有代码生成模型一样,对生成的代码进行后处理非常重要。特别是推荐执行以下后处理步骤: