見出し画像

Llama-3-ELYZA-JP-8Bを雑に触る

Llama-3-ELYZA-JP-8Bについては下記参照。


0. 環境

OS:Windows
CPU:Intel(R) Core i9-13900KF
RAM:128GB
GPU:RTX 4090

1. RAGに使用するDBの準備

下記で作成したDBを流用します。
DBの内容は、Google Patentsで「(semiconductor) country:US after:priority:20230101 language:ENGLISH」でヒットした857件の特許のうち、下記記事でFinFETに分類されたものです。

from langchain.embeddings import HuggingFaceBgeEmbeddings
from langchain.vectorstores import Chroma

model_name = "BAAI/bge-large-en-v1.5"
encode_kwargs = {'normalize_embeddings': True} 
embedding_function = HuggingFaceBgeEmbeddings(
    model_name=model_name,
    model_kwargs={'device': 'cuda'},
    encode_kwargs=encode_kwargs
)

txt_path = r"C:\Users\Documents\Patent\Semiconductor\topic folder\3D FinFET fabrication process" # 保存したフォルダ
persist_directory = f'{txt_path}/vdb'
vectordb = Chroma(persist_directory=persist_directory, embedding_function=embedding_function)

2. RAGの設定

modelとtokenizerの設定。

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

model_name = "elyza/Llama-3-ELYZA-JP-8B"

tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    torch_dtype="auto",
    device_map="cuda",
)

LangchainのRetrievalQAを設定。

from transformers import pipeline
from langchain.llms import HuggingFacePipeline

pipe = pipeline("text-generation", model=model, tokenizer=tokenizer,
                device_map="auto", max_new_tokens=4096,
                repetition_penalty=1.15
               )

llm = HuggingFacePipeline(pipeline=pipe)
from langchain.chains import RetrievalQA

retriever = vectordb.as_retriever(search_kwargs={"k": 30})
qa_chain = RetrievalQA.from_chain_type(llm=llm,
                                  chain_type="stuff",
                                  retriever=retriever,
                                  return_source_documents=True,  
                                      )

3. 質疑

質問:

query = "「FinFET」とはなんですか?またその特徴を教えてください。日本語で答えてください。"
llm_response = qa_chain(query)

target = 'Helpful Answer: '
idx = llm_response['result'].find(target)
r = llm_response['result'][idx+len(target):] 

print(r)

回答:

「FinFET」は、Field-Effect Transistorの略称であり、「フィン型電界効果トランジスタ」のことを指します。 FinFETは、半導体デバイスの構造の一つです。通常のMOSFET(Metal-Oxide-Semiconductor Field-Effect Transistor)と比較して、FinFETは、チャネル部分が「fin」状に形成されており、この形状により、以下のような特徴があります。 - 高速動作: FinFETは、高速スイッチング動作が可能なため、高周波数での信号処理や大容量データ転送などに適しています。 -低消費電力: FinFETは、少ない電流で動作することができるため、低消費電力を実現できます。 -高集積度: FinFETは、狭い面積に多くのトランジスタを配置することが可能であるため、高集積度化を達成し、LSI(Large Scale Integration)の小型化・高性能化に貢献します。 以上のように、FinFETは、微細加工技術を活用した新しい半導体デバイス構造であり、高速・低消費電力・高集積度という特性を持っています。

質問2:

query = "FinFETの主な課題とその解決策はなんですか?確定的な情報がない場合、予想を教えて下さい。日本語で答えてください。"
llm_response = qa_chain(query)

target = 'Helpful Answer: '
idx = llm_response['result'].find(target)
r = llm_response['result'][idx+len(target):] 

print(r)

回答:

FinFET(Fin Field Effect Transistor)の主要な課題として挙げられるのは、以下のような点です。 課題1:リーク電流の増加による性能低下 解決策:ゲートスタック構造やチャネル長の最適化などにより、リーク電流を減少させることができます。 課題2:スケーリング限界に到達しやすいこと 解決策:新しい材料やプロセス技術の開発によって、FinFETのスケーリング限界を克服する必要があります。 課題3:高温での信頼性が劣ること 解決策:高温環境でも安定動作するような設計や素子構造の研究が進められています。 課題4:製造コストの高さ 解決策:量産化やプロセスの改善により、製造コストを削減することが期待されます。 Note: 上記は、一般的に知られている課題と解決策であり、具体的かつ確定的な情報ではありません。また、将来の技術進歩や新たな発見等によって、課題や解決策も変化する可能性があります。

4. 感想

雑に触っただけですが、十分に賢さが伝わってきます。

この記事が気に入ったらサポートをしてみませんか?