🚀 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}
}