HuggingFace 몇개 모델 체험

Language 중에 하나인 Verilog language (하드웨어 설계시 사용하는 언어) 가 학습되어 있는 LLM 모델을 사용해보았다.

Verilog language는 다른 programming language 에 비해, source가 부족하여, GPT 만으로 의존하기 아쉬어 huggingface 에 어떤 모델들이 있나 확인해보았다.

허깅페이스에 등록되어 있는 50만개 모델중 9개 나온다.

shailja/fine-tuned-codegen-*B-Verilog. Baseline LLM SalesForce/CodeGen

silverliiningeda llama2 7b 모델

ahmedallam 는 base가 starcoder2 15b

emilgoh 는 base가 Mistral 7b

yangwooko는 base가 santacoder 라고 제목에 있는데 모델 사이즈 명시되어 있지 않다.

각각 어떤 base model + finetune에 사용된 dataset에 따라 성능이 갈릴거 같은데,

위에 있는 모델 살펴보기 전에 코딩 관련 model 벤치마크부터 보자

https://evalplus.github.io/leaderboard.html

대형 모델 빼고, Deepseek, opencoderInterpreter, MagicCoder. 근데 opencoderI, magiccoder전부 deepseek 이 base. Deepseek은 기존 여러 코딩용 llm을 조합해서 2T tokens 학습한 친구.

33B 모델만 해도, 아주 높은 사양의 인프라를 요구하므로, 7B 이하급 한개 골랐다.

OpenCodeInterpreter-DS-6.7B


허깅페이스에 있는 모델로 돌아와 설명을 살펴보면 아래와 같다.

  1. shailja/fine-tuned-codegen-16B-Verilog

The model was trained on Verilog from GitHub and textbooks.

The final Verilog corpus of textbook-extracted and GitHub code had a size of 400 MB.

Dataset 도 허깅페이스에 있는데 shailja/Verilog_GitHub. 109k rows.

10만줄 이상의 셋으로 A100 4개 15일 트레이닝 함.

논문에 base model & Pretrained or Finetuned 실험 결과가 나와 있다.

대략 CodeGen-16B 가 젤 좋아서, 저렇게 공유한것.

근데 16B 도 GPU 메모리 40GB 이상 필요해서, google colab 유료로도 실패.

6B 선택. shailja/fine-tuned-codegen-6B-Verilog


  1. silverliningeda/llama-2-7b-silverliningeda-verilog-codegen

정보 기입이 없다. llama2 7b 모델에 무엇을 트레이닝 했는지 모르니 패스.

  1. ahmedallam/VerilogCoder

구체적인 training dataset 이 안나와 있다.

  1. emilgoh/mistral-verilog

This model is a fine-tuned version of mistralai/Mistral-7B-v0.1 on an unknown dataset.

올린 사람이 training한게 아닌가봄.


정석으로 하려면, benchmark 코드로 pass 테스트 해야겠지만, 시간여력 핑계로,

몇개 프롬프트만 적용 테스트

# prompt = "Verilog.  Write D flipflop"
# prompt = "You are a System Verilog expert. Write UVM testbench including AXI. DUT is simple feed through."
# prompt = "generate a Verilog module with the following description: Module with multiple wires and assignments"
# prompt = "Generate a Verilog module with the following description: Parameterized module"
# prompt = "Generate a system veriloog for a parameterized sequence class that adapts parameterized transactions"
# prompt = "Please fix the error.\
# ```\
# module top()\
# int a;\
# initial \
# begin\
# assign a = 1;\
# end\
# endmodule\
# ```\
# "


테스트 결과 표로 정리해보면 아래와 같다.

model1 : m-a-p/OpenCodeInterpreter-DS-6.7B

model2: shailja/fine-tuned-codegen-6B-Verilog

model3: silverliningeda/llama-2-7b-silverliningeda-verilog-codegen

//15B를 먼저 올려야하나 40GB RAM 으로 불가능. model4: ahmedallam/VerilogCoder

//동작 안함. model5: emilgoh/mistral-verilog

Model1 은 Base가 가지고 있는 학습양이라 그런지 성능이 많이 떨어진다.

Model2 는 training dataset 이 10만줄 이상이나 되었다고 하지만, 6b 모델로 자연어로 프롬프트 넣을시 처참할 정도로 성능이 떨어짐.

Model3 는 학습 데이터가 제대로 갖춰지지 않았을것이라고 생각한다. llama2 가 기본적으로 덜떨어진 base model은 아니니.

Model4 개인 리소스로 더이상 진행 않기로.


허깅페이스 사용시 내가 직접 모델을 학습/추론으로 사용하려면 돈이 좀 들어가는 현실이 아쉽다.

구글 colab 유료에서 주는 컴퓨팅을 모두 사용해서 컴퓨팅을 추가 구매후 해야한다.


#10기 HuggingFace 허깅페이스

4

👉 이 게시글도 읽어보세요