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

Granite-8B-Code-Base-128K

模型概述

Granite-8B-Code-Base-128K 通过持续预训练将 Granite-8B-Code-Base 的上下文长度从 4K 扩展到 128K。我们使用原始训练数据,但采用了仓库级文件打包和按语言长度上采样的方法,这在长上下文预训练中被证实至关重要。 我们采用渐进式训练策略,通过适当调整 RoPE theta 值,将上下文窗口逐步翻倍,直至达到目标长度 128K。所有阶段的训练总tokens量为 40 亿,仅占 Granite-8B-Code-Base 原始预训练数据的 0.1%。

  • 开发者:IBM Research
  • GitHub 仓库:ibm-granite/granite-code-models
  • 论文:Scaling Granite Code Models to 128K Context
  • 发布日期:2024 年 7 月 18 日
  • 许可证:Apache 2.0。

使用方法

预期用途

支持 128K 上下文长度的大型语言模型在软件工程生产力方面的主要企业用例包括代码生成、代码解释、代码修复、生成单元测试、生成文档、解决技术债务问题、漏洞检测、代码转换等。所有 Granite Code Base 模型(包括 3B 参数模型)均能处理这些任务,因为它们是在涵盖 116 种编程语言的大量代码数据上训练而成的。

生成

以下是使用 Granite-8B-Code-Base-128K 模型的简单示例。

import torch
from openmind import AutoModelForCausalLM, AutoTokenizer
device = "npu" # or "cpu"
model_path = "SY_AICC/granite-8b-code-base-128k"
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)

训练数据

本模型以基础 Granite 模型为起点,在仓库级代码数据上进行了进一步预训练,并采用了按语言进行上下文长度过采样的方法,使其能够有效利用长达 128K tokens 的上下文。此持续训练阶段专注于精选的编程语言,如 Python、C、C++、Go、Java、JavaScript 和 TypeScript。

基础设施

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

伦理考量与局限性

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