🚀 VeriGen
VeriGen是一款基于特定数据集微调的模型,可用于Verilog代码生成,为硬件描述语言的开发提供助力,在相关领域有一定的应用价值。
🚀 快速开始
目录
- 模型概述
- 使用方法
- 局限性
- 训练信息
- 许可证
- 引用方式
🔍 模型概述
VeriGen模型是一个具有160亿参数的微调版本模型,它基于CodeGen - multi - 16B,并在Verilog代码数据集上进行了训练。
属性 |
详情 |
模型类型 |
基于CodeGen - multi - 16B微调的160亿参数模型 |
训练数据 |
Verilog代码数据集 |
💻 使用方法
预期用途
该模型在来自GitHub和教科书的Verilog代码上进行训练,因此它不是一个指令模型,像“编写一个实现2对1多路复用器的模块”这样的命令效果不佳。但是,在提示文本中添加部分模块头行,如“module mux”,可以让它成为一个有用的Verilog教学助手。
💡 使用建议
欢迎在社区板块分享你的生成结果!
代码生成示例
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
prompt = "//module half adder "
device='cuda'
model_name = "shailja/fine - tuned - codegen - 16B - Verilog"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name).to(device)
input_ids = tokenizer(prompt, return_tensors="pt").input_ids.to(device)
sample = model.generate(input_ids, max_length=128, temperature=0.5, top_p=0.9)
print(tokenizer.decode(sample[0], truncate_before_pattern=[r"endmodule"]) + "endmodule")
归属与其他要求
该模型的预训练数据集并非仅筛选了允许使用的许可证数据。因此,模型可能会直接生成数据集中的源代码。代码的许可证可能要求归属声明和/或其他特定要求,必须予以遵守。
⚠️ 局限性
该模型在来自开源的Verilog源代码上进行训练。源代码中主要使用的自然语言是英语,不过也存在其他语言。因此,该模型能够在一定上下文下生成Verilog代码片段,但生成的代码不能保证按预期工作,可能效率低下、包含错误或漏洞。有关模型局限性的深入讨论,请参阅[相关论文](https://drive.google.com/file/d/1cN - b9GnWtHzQRoE7M7gAEyivY0kl4BYs/view)。
🏋️ 训练信息
模型信息
- 架构:具有多查询注意力机制的GPT - 2模型
- 预训练步数:150k
- 预训练词元数:约720亿
- 精度:fp16
硬件信息
- GPU:4块Tesla A100
- 训练时间:15天
📄 许可证
该模型遵循BigCode OpenRAIL - M v1许可协议,你可以在[此处](https://huggingface.co/spaces/bigcode/bigcode - model - license - agreement)查看完整协议。
📚 引用方式
@misc{https://doi.org/10.48550/arxiv.2212.11140,
doi = {10.48550/ARXIV.2212.11140},
url = {https://arxiv.org/abs/2212.11140},
author = {Thakur, Shailja and Ahmad, Baleegh and Fan, Zhenxing and Pearce, Hammond and Tan, Benjamin and Karri, Ramesh and Dolan - Gavitt, Brendan and Garg, Siddharth},
title = {Benchmarking Large Language Models for Automated Verilog RTL Code Generation},
publisher = {arXiv},
year = {2022},
copyright = {arXiv.org perpetual, non - exclusive license}
}