芯片开发语言:Verilog在左,Chisel在右
来源:内容转载自公众号「老石谈芯」,谢谢。
老石按:
在传统的数字芯片开发里,绝大多数设计者都会使用诸如Verilog、VHDL或者SystemVerilog的硬件描述语言(HDL)对电路的行为和功能进行建模。但是在香山处理器里,团队选择使用Chisel作为主要开发语言。这是基于怎样的考虑?
Chisel是基于Scala这个函数式语言来扩展出来的,我们可以把它看做是一个用来描述电路的领域专用语言,它和Verilog还是有很大区别的。
事实上,我们自己也做过两种语言的对比。在2016年,我们整个团队开始决定用RISC-V去实现标签化体系结构,也在那个时候开始接触Chisel。最早的时候我们重用了UC伯克利开发了的名叫Rocket的开源内核。这是个顺序执行的小核,我们在它上面加上了我们的标签机制,这期间其实就有很多的一些开发体会。
Rocket chip generator的系统架构图
前面提到我们的同学原来对Verilog很熟,但是用Chisel以后就会有一种爱不释手的感觉。有好多的通信,特别是年轻的同学,他们都愿意去尝试使用Chisel。有一个北大的研究生,他在做报告的时候讲,你用了Chisel以后就再也回不去了。
其实,我们自己还做过量化的评估。在2018年,我们团队里有两个本科生和一个工程师做过一个实验。这个实验是要开发一个L2 Cache,但是要集成到RISC-V的内核里。我们的工程师是用Verilog来开发的,他对Cache非常熟悉。他把OpenSPARC里面的Cache、还有Xilinx提供的Cache等等都研究过,代码都读得很透。所以他用Verilog开发,并且接到RISC-V里面去。当时他花了应该是6个星期开发,包括测试框架等等,一共写了5000多行代码。即便这样,后面还是有一些问题和Bug。
另外,我们当时有一位大四的本科生,现在也是香山的核心成员,他懂一些计算机体系结构,使用Chisel有9个月的时间。
表格来源:《芯片敏捷开发实践:标签化RISC-V》
我们觉得,本科生使用Chisel做的设计,哪怕是性能或者各方面差了一些,但他只用了三天时间。这样我们就可以快速去验证,并且实现我们的想法。
当然这个只是第一组实验。我们当时有一个群,在群里面吵的还是挺不可开交的,因为我们的工程师那个时候很不服气,他就觉得他的代码各方面都质量更高。所以我们后来又有另外一位中国科学院大学的大四本科生,他懂Verilog、但是没学过Chisel,所以他做的事情就是读我们工程师的Verilog代码,并把核心代码一行一行翻译成Chisel,最后要通过工程师写的测试。也就是说,翻译后的Chisel和Verilog实现的逻辑功能是完全一致的。
翻译完之后,再在同一个FPGA上面评估,看设计的PPA、 频率、功耗,还有使用的资源等等。这样下来的话,你就会看到其实出来的指标上面,大多数的指标实际都是Chisel还反而更好一些,代码量也会比他要小。
这还只是第一个阶段。后面我们的本科生又在博士生的指导下,
表格来源:《芯片敏捷开发实践:标签化RISC-V》
Chisel vs 高层次综合
老石按:
在FPGA里高层综合是一个非常热、非常流行的一个研究方向。但是我知道Chisel和高层次综合可能并不是一回事。在Chisel官网上也明确的指出:我不是高层次综合。但在我看来,它们背后的思维方式、或者是大的方向是有共同之处的,也就是让硬件开发更加的快速、更加敏捷。也就是像您刚才说的,从想法到实现,周期更加缩短。
但是从高层综合的角度来看,虽然学术界一直在讲高层次综合已经很多年的时间,它实际的商业化可能还是需要特别突破性的进展。现在业界的这些设计,比如大的网络设计、还有数据中心加速器的这些设计,仍然是基于SystemVerilog/Verilog/VHDL这样的RTL语言。这主要是因为高层次综合有这么几个问题:
第一个就是HLS可能并不能覆盖掉的全部应用领域,也就是说它可能适合于某些应用领域,但是对于这种吞吐量比较大的、或者高速数据包处理这些应用,它可能就不那么适合。
另外一个就是它的验证。因为它相当于在RTL顶上加了一层额外的高层次语言,等它综合或者处理完了以后,还是生成底层的RTL语言,然后再走原来的FPGA的这些开发流程。所以在验证过程中,增加额外的这层可能会给验证工作造成很大的问题。所以关于这两点您怎么看?
我想其实它的通用性方面是没有问题的。Chisel本身是一个硬件描述语言,所以从它的这种完备性来看的话,它跟Verilog是一样的。也就是说,Verilog能干什么事,Chisel也能干什么事,这两个是没有什么区别的,它只不过是另外一种语法表达而已。
调试是很多人都担心的一个问题。因为Chisel它现在其实是一个源到源的翻译,是首先是基于Scala这套语法去写一个硬件的描述。然后通过FIRRTL进行翻译。再往后走的话,其实是用Verilog那套流程去做,最后生成GDSII版图。
所以在这个过程当中,其实是明显的分成两个阶段了。前面一个阶段Chisel到Verilog,第二阶段就是Verilog到GDSII版图。
我们用Chisel已经流过三颗芯片,有大的芯片、有的小的芯片,有单核的有8核的。在早期的时候,我们其实也遇到过这样的一些问题。比如你用Chisel写的代码生成了Verilog,Verilog里面有一些变量,你那边在Chisel里面改一行代码,那它这个变量就全部重新改变。后来其实仔细分析以后,我们发现这些问题都是可以有一些办法来解决的,或者说它不是阻碍可调试性的最根本的问题。所以后面我们在做香山的时候,我们在这些方面已经处理得比较好了。
就像我们有同学,他自己开发了一个工具,可以把电路波形直接转变成一个上层的高级的事件。这个时候他其实就用了Chisel和FIRRTL里面的特性。
因为FIRRTL它有点像LLVM,它可以放很多的这样自己设计的模块,FIRRTL也可以定义自己需要的功能。这个在LLVM里叫pass,在FIRTEL里叫transformer。
有了这些工具,就可以让Chisel源码和下面波形建立起联系,让调试的过程甚至比原来用Verilog还要方便。
除了这个工具,同学们还自定义和扩展了一些printf,让我们在调的时候很多时候根本不用去看波形。这些都得益于Chisel的强大和开放。
*免责声明:本文由作者原创。文章内容系作者个人观点,半导体行业观察转载仅为了传达一种不同的观点,不代表半导体行业观察对该观点赞同或支持,如果有任何异议,欢迎联系半导体行业观察。
今天是《半导体行业观察》为您分享的第2745内容,欢迎关注。
晶圆|集成电路|设备|汽车芯片|存储|MLCC|英伟达|模拟芯片
专攻芯片设计,英伟达推出定制版大语言模型ChipNeMo!
编辑:好困
【新智元导读】英伟达:大语言模型或将全面加持芯片设计全流程!
在刚刚开幕的ICCAD 2023大会上,英伟达团队展示了用AI模型测试芯片,引发了业界关注。
众所周知,半导体设计是一项极具挑战性的工作。
在显微镜下,诸如英伟达H100这样的顶级芯片,看起来就像是一个精心规划的大都市,这其中的数百亿个晶体管则连接在比头发丝还要细一万倍的街道上。
为了建造这样一座数字巨城,需要多个工程团队长达两年时间的合作。
其中,一些小组负责确定芯片的整体架构,一些小组负责制作和放置各种超小型电路,还有一些小组负责进行测试。每项工作都需要专门的方法、软件程序和计算机语言。
ChipNeMo:英伟达版「芯片设计」大模型
最近,来自英伟达的研究团队开发了一种名为ChipNeMo的定制LLM,以公司内部数据为基础进行训练,用于生成和优化软件,并为人类设计师提供帮助。
论文地址:https://research.nvidia.com/publication/2023-10_chipnemo-domain-adapted-llms-chip-design
研究人员并没有直接部署现成的商业或开源LLM,而是采用了以下领域适应技术:自定义分词器、领域自适应持续预训练(DAPT)、具有特定领域指令的监督微调(SFT),以及适应领域的检索模型。
结果表明,与通用基础模型相比(如拥有700亿个参数的Llama 2),这些领域适应技术能够显著提高LLM的性能——
不仅在一系列设计任务中实现了类似或更好的性能,而且还使模型的规模缩小了5倍之多(定制的ChipNeMo模型只有130亿个参数)。
具体来说,研究人员在三种芯片设计应用中进行了评估:工程助理聊天机器人、EDA脚本生成,以及错误总结和分析。
其中,聊天机器人可以回答各类关于GPU架构和设计的问题,并且帮助不少工程师快速找到了技术文档。
代码生成器已经可以用芯片设计常用的两种专业语言,创建大约10-20行的代码片段了。
代码生成器
而最受欢迎分析工具,可以自动完成维护更新错误描述这一非常耗时的任务。
对此,英伟达首席科学家Bill Dally表示,即使我们只将生产力提高了5%,也是一个巨大的胜利。
而ChipNeMo,便是LLM在复杂的半导体设计领域,迈出的重要的第一步。
这也意味着,对于高度专业化的领域,完全可以利用其内部数据来训练有用的生成式AI模型。
数据
为了构建领域自适应预训练(DAPT)所需的数据,研究人员同时结合了英伟达自己的芯片设计数据,以及其他公开可用的数据。
经过采集、清洗、过滤,内部数据训练语料库共拥有231亿个token,涵盖设计、验证、基础设施,以及相关的内部文档。
就公共数据而言,研究人员重用了Llama2中使用的预训练数据,目的是在DAPT期间保留一般知识和自然语言能力。
在代码部分,则重点关注了GitHub中与芯片设计相关的编程语言,如C++、Python和Verilog。
在监督微调 (SFT) 过程中,研究人员选取了可商用的通用聊天SFT指令数据集,并制作了的特定领域指令数据集。
为了快速、定量地评估各种模型的准确性,研究人员还构建了专门的评估标准——AutoEval,形式类似于MMLU所采用的多选题。
训练
ChipNeMo采用了多种领域适应技术,包括用于芯片设计数据的自定义分词器、使用大量领域数据进行领域自适应预训练、使用特定领域任务进行监督微调,以及使用微调检索模型进行检索增强。
首先,预训练分词器可以提高特定领域数据的分词效率,保持通用数据集的效率和语言模型性能,并最大限度地减少重新训练/微调的工作量。
其次,研究人员采用了标准的自回归语言建模目标,并对特定领域的数据进行了更深入的预训练。
在DAPT之后,则进一步利用监督微调(SFT)来实现模型的对齐。
针对大模型的幻觉问题,研究人员选择了检索增强生成(RAG)的方法。
研究人员发现,在RAG中使用与领域相适应的语言模型可以显著提高特定领域问题的答案质量。
此外,使用适量的特定领域训练数据对现成的无监督预训练稠密检索模型进行微调,可显著提高检索准确率。
结果
首先,自适应的分词器可以在各种芯片设计数据集中,将分词效率提高1.6%至3.3%。
其次, ChipNeMo模型在芯片设计领域基准AutoEval和开放领域学术基准上的测试结果显示:
1. DAPT模型在开放领域学术基准上的准确性略有下降。
2. DAPT对领域本身的任务产生了积极的影响。其中,模型对于内部设计和电路设计的知识水平显著提高。
3. 使用规模更大、性能更强的基础模型,可以在特定领域任务中获得更好的结果。
4. DAPT对域内任务的改进与模型大小呈正相关,较大的模型在DAPT后对特定领域任务性能的提升更为明显。
所有模型均使用128个A100 GPU进行训练。研究人员估算了与ChipNeMo领域自适应预训练相关的成本,如下表所示。
值得注意的是,DAPT占从头开始预训练基础模型总成本的不到1.5%。
RAG和工程助理聊天机器人
研究人员对使用和不使用RAG的多个ChipNeMo模型和Llama 2模型进行了评估,结果如图8所示:
- RAG可以大幅提升模型的得分,即便RAG未命中,分数通常也会更高。
- ChipNeMo-13B-Chat获得的分数比类似规模的Llama2-13B-Chat更高。
- 使用RAG的ChipNeMo-13B-Chat与使用RAG的Llama2-70B-Chat获得了相同的分数(7.4)。当RAG命中时,Llama2-70B-Chat得分更高;但RAG未命中时,具有领域适应的ChipNeMo表现更好。
- 领域SFT使ChipNeMo-13B-Chat的性能提高了0.28(有 RAG)和0.33(无 RAG)。
EDA脚本生成
从图9中可以看出,DAPT补足了模型对底层API的知识,而领域域SFT进一步改善了结果。
一个有趣的结果是,LLaMA2-70B似乎可以借助卓越的通用Python编码能力,来解决尚未接受过训练的新问题。但由于它几乎没有接触过Tcl代码,因此在该工具上的表现较差。
而这也凸显了DAPT在小众或专有编程语言方面的优势。
Bug总结与分析
结果如图10所示,ChipNeMo-13B-Chat模型在所有三项任务上均优于基本LLaMA2-13B-Chat模型,分别将技术总结、管理总结和任务推荐的分数提高了0.82、1.09和0.61。
此外,领域SFT也显著提高了模型在管理总结和任务分配方面的性能。
不过,Llama2-70B-Chat模型在所有任务上表现都要比ChipNeMo-13B更加出色。
讨论
虽然较大的Llama2 70B有时也可以达到与ChipNeMo相似的精度,如图8、9和10所示。但考虑较小规模的模型所带来的成本效益,也同样重要。
比如,与Llama2 70B不同,英伟达的ChipNeMo 13B可以直接加载到单个A100 GPU的显存中,且无需任何量化。这使得模型的推理速度可以得到大幅提升。与此同时,相关研究也表明,8B模型的推理成本就要比62B模型低8-12倍。
因此,在生产环境中决定使用较大的通用模型还是较小的专用模型时,必须考虑以下标准:
- 训练和推理权衡:
较小的领域适应模型可以媲美更大的通用模型。虽然领域适应会产生额外的前期成本,但使用较小的模型可以显著降低运营成本。
- 用例独特性:
从图6、9和10中可以看出,领域适应模型模型在很少出现在公共领域的任务中表现极佳,如用专有语言或库编写代码。而对于通用大模型来说,即使提供了精心挑选的上下文,也很难在这种情况下与领域适应模型的准确性相媲美。
- 领域数据可用性:
当存在大量训练数据(数十亿训练token)时,领域适应效果最好。对于积累了大量内部文档和代码的公司和项目来说,情况通常如此,但对于较小的企业或项目则不一定。
- 用例多样性:
虽然可以针对特定任务微调通用模型,但领域适应模型可以适用于领域中的各种任务。
总的来说,领域自适应预训练模型(如ChipNeMo-13B-Chat)通常可以取得比其基础模型更好的结果,并且可以缩小与规模更大的模型(如Llama2 70B)之间的差距。
参考资料:
https://blogs.nvidia.com/blog/2023/10/30/llm-semiconductors-chip-nemo/
https://spectrum.ieee.org/ai-for-engineering
相关问答
芯片读取代码原理?
c语言要先转成机器语言,就是一串01组成的代码,然后烧录到芯片中,芯片通电后会自动读取这窜0101的代码,物理表现对应的就是一串高低频信号,通过高低电信号驱...
8266芯片用啥语言编程?
8266芯片可以使用多种语言进行编程,其中包括C语言、C++语言、MicroPython、Lua脚本等。不同的语言适合不同的应用场景,例如C语言适合对嵌入式系统进行底层控制...
电气工程师要编程吗,电气工程师要编程吗知识?
分情况而定。如果你是在国家电网,三峡,葛洲坝,以及各房地产施工范围做电气工程师,基本上不需要编程的。如果在非标自动化设备之类的公司做电气工程师,编程...
语言芯片作文_作业帮
[最佳回答]这天,在钱博士的实验室里,钱博士发明了一种叫做语言芯片的东西,他立刻召集了炎龙他们,说:“哇吼,太棒了,我终于成功了。”“什么成功了?”“我辛辛...
什么是verilog语言?
VerilogHDL是目前应用最为广泛的硬件描述语言.VerilogHDL可以用来进行各种层次的逻辑设计,也可以进行数字系统的逻辑综合,仿真验证和时序分析等。Veril...
未来会有语言芯片吗?
谢谢头条。未来语言芯片肯定有,从人类科学技术的发展看,未来人工智能的要求,语言芯片就像电脑,手机系统中其它芯片一样应该是必须的标配,希望中国的科学家们...
dsp芯片需要编程吗?
入门:建议买个简单的开发板,5000系列就可以,不是很贵。和51,PIC单片机的区别在于DSP在数字处理上面的优势----速度强劲!!!编程语言基本上都是用C语言,...和...
中国芯片起航,需要科技企业发布底层支持的中文编译器,支持吗?
这意味着将中文降维复杂度要高于英文单词,所以在自然语言编译中使用中文是一种除了民族主义需求以外最愚蠢的反科学行为!如果从符号系统来说,最好能用纯数学符...
易语言能在高通芯片上运行吗?-ZOL问答
目前,由于易语言运行在Windows操作系统上使用的X86架构,并且高通芯片采用ARM架构,因此两者之间的指令集是不兼容的。这导致了无法在高通芯片上直接运行易语言编...
硬件驱动程序是用什么编程语言写的?它的原理是?
硬件驱动程序主要使用C语言或C++语言编写。驱动程序的主要作用是实现操作系统与硬件设备之间的接口与信息交换。其基本原理是:1.控制和配置硬件:驱动程序...