HuggingFace镜像/granite-3b-code-base-2k
模型介绍文件和版本分析
下载使用量0

Granite-3B-Code-Base-2K

模型概述

Granite-3B-Code-Base-2K 是一款纯解码器代码模型,专为代码生成类任务(如代码生成、代码解释、代码修复等)设计。该模型采用两阶段训练策略从头开始训练。在第一阶段,我们的模型在源自 116 种编程语言的 4 万亿 tokens 上进行训练,确保其对编程语言和语法有全面的理解。在第二阶段,我们的模型在 5000 亿 tokens 上进行训练,这些 tokens 是精心设计的代码和自然语言领域高质量数据的混合,旨在提升模型的推理能力和指令遵循能力。

  • 开发者:IBM Research
  • GitHub 仓库:ibm-granite/granite-code-models
  • 论文:Granite Code Models: A Family of Open Foundation Models for Code Intelligence
  • 发布日期:2024 年 5 月 6 日
  • 许可证:Apache 2.0。

使用方法

预期用途

在软件工程生产力方面,大型语言模型(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)

训练数据

  • 数据收集与筛选:预训练代码数据来源于多个公开可用数据集(例如 [GitHub Code Clean]、[Starcoder data]),以及 GitHub 上的其他公开代码仓库和问题。我们对原始数据进行筛选,保留了 116 种编程语言的代码。在语言筛选之后,我们还会过滤掉低质量代码。
  • 精确与模糊去重:我们采用积极的去重策略,包括精确去重和模糊去重,以移除包含(近乎)相同代码内容的文档。
  • HAP、PII、恶意软件筛选:我们应用 HAP 内容过滤器,以降低模型生成仇恨、辱骂或亵渎性语言的可能性。我们还确保通过将个人身份信息(PII)内容(例如姓名、电子邮件地址、密钥、密码)替换为相应的标记(例如 ⟨NAME⟩、⟨EMAIL⟩、⟨KEY⟩、⟨PASSWORD⟩)来对其进行脱敏。此外,我们使用 ClamAV 扫描所有数据集,以识别并移除源代码中的恶意软件实例。
  • 自然语言数据集:除了收集用于模型训练的代码数据外,我们还精心挑选了多个公开可用的高质量自然语言数据集,以提高模型的语言理解和数学推理能力。与代码数据不同,我们不对这些数据集进行去重。

基础设施

我们使用 IBM 的两个超级计算集群(即 Vela 和 Blue Vela)训练 Granite Code 模型,这两个集群分别配备了 NVIDIA A100 和 H100 GPU。这些集群为我们在数千个 GPU 上训练模型提供了可扩展且高效的基础设施。

伦理考量与局限性

大型语言模型的使用涉及人们必须意识到的风险和伦理考量。在代码生成方面,由于生成的代码不能保证按预期工作,因此不建议完全依赖特定的代码模型来做出关键决策或获取重要信息。Granite-3B-Code-Base-2K 模型在这方面也不例外。尽管该模型适用于多种代码相关任务,但它并未经过任何安全对齐,因此可能会产生有问题的输出。此外,由于较小模型的尺寸和记忆能力有限,它们在生成场景中是否更容易通过逐字复制训练数据中的源代码而产生幻觉,这一点仍不确定。这方面目前是一个活跃的研究领域,我们期待在该领域进行更严格的探索、理解和缓解。在伦理方面,所有大型语言模型都存在被恶意利用的潜在风险。我们恳请社区以符合伦理的意图并负责任地使用 Granite-3B-Code-Base-2K 模型。