Granite-3B-Code-Base-2K 是一款纯解码器代码模型,专为代码生成类任务(如代码生成、代码解释、代码修复等)设计。该模型采用两阶段训练策略从头开始训练。在第一阶段,我们的模型在源自 116 种编程语言的 4 万亿 tokens 上进行训练,确保其对编程语言和语法有全面的理解。在第二阶段,我们的模型在 5000 亿 tokens 上进行训练,这些 tokens 是精心设计的代码和自然语言领域高质量数据的混合,旨在提升模型的推理能力和指令遵循能力。
在软件工程生产力方面,大型语言模型(LLMs)的主要企业用例包括代码生成、代码解释、代码修复、生成单元测试、生成文档、解决技术债务问题、漏洞检测、代码翻译等。所有 Granite Code Base 模型,包括 30 亿参数模型,都能够处理这些任务,因为它们是在来自 116 种编程语言的大量代码数据上训练的。
以下是如何使用 Granite-3B-Code-Base-2K 模型的简单示例。
import torch
from openmind import is_torch_npu_available, AutoModelForCausalLM, AutoTokenizer
if is_torch_npu_available():
device = "npu:0"
elif torch.cuda.is_available():
device = "cuda:0"
else:
device = "cpu"
model_path = "SY_AICC/granite-3b-code-base-2k"
tokenizer = AutoTokenizer.from_pretrained(model_path)
# drop device_map if running on CPU
model = AutoModelForCausalLM.from_pretrained(model_path, device_map=device)
model.eval()
# change input text as desired
input_text = "def generate():"
# tokenize the text
input_tokens = tokenizer(input_text, return_tensors="pt")
# transfer tokenized inputs to the device
for i in input_tokens:
input_tokens[i] = input_tokens[i].to(device)
# generate output tokens
output = model.generate(**input_tokens)
# decode output tokens into text
output = tokenizer.batch_decode(output)
# loop over the batch to print, in this example the batch size is 1
for i in output:
print(i)我们使用 IBM 的两个超级计算集群(即 Vela 和 Blue Vela)训练 Granite Code 模型,这两个集群分别配备了 NVIDIA A100 和 H100 GPU。这些集群为我们在数千个 GPU 上训练模型提供了可扩展且高效的基础设施。
大型语言模型的使用涉及人们必须意识到的风险和伦理考量。在代码生成方面,由于生成的代码不能保证按预期工作,因此不建议完全依赖特定的代码模型来做出关键决策或获取重要信息。Granite-3B-Code-Base-2K 模型在这方面也不例外。尽管该模型适用于多种代码相关任务,但它并未经过任何安全对齐,因此可能会产生有问题的输出。此外,由于较小模型的尺寸和记忆能力有限,它们在生成场景中是否更容易通过逐字复制训练数据中的源代码而产生幻觉,这一点仍不确定。这方面目前是一个活跃的研究领域,我们期待在该领域进行更严格的探索、理解和缓解。在伦理方面,所有大型语言模型都存在被恶意利用的潜在风险。我们恳请社区以符合伦理的意图并负责任地使用 Granite-3B-Code-Base-2K 模型。