見出し画像

ローカルLLMでWebページを要約する

ローカルLLMを使用してWebページを要約してみた。経緯としては、メンバー記事にのせる予定の「ちょっといい使い方(RAG/Fine-tuning)、アウトプット」を進める中で得られたことを書いた

前提・注意点・感想

  • WindowsPCで実行、メモリは16GBは欲しい

  • CPUはRyzen5、GPUは不使用だったかと、ただし、処理速度は期待できないことを断っておく。正直、ChatGPTやGeminiに文章を読み込ませた方が早いだろう

  • LangCgainを使用しているが、内部的にはテキストを読み込ませる行為なのかと思う。詳細が分かるようになるといいので、余裕があるときにコードがあれば読んでみたいと思う

  • モデルはmetaのllamaのchatモデルをggufに変換して使用する

  • llamaをフォークしたファインチューニングの日本語のモデルをいくつか試したが、まともに要約しなかった。各モデルの公式の広報は凄そうにかくが、計画外なのか対応できていないようだ。学習の量なのか、そもそもロジック上の問題なのか分からんが、そもそもの回答内容もchatGPTと比べればロジカルな回答ではないと思う。とりあえず、オリジナルのllamaを使うのがよいかと

  • LangChainのWebBaseLoaderを使用しているが、サイトによって文字化けるので注意すること。うまく行かない場合はBeautiful Soup等で代用を検討してみること

  • LLMの特性上、毎回、同じ回答になるとは限らないため注意すること

  • まだまだ、langchainやllmの(研究レベルから)理解が浅いところもあるので、改善できる余地はあるかもしれない

実装

コードは下記の通り

from langchain.chains.summarize import load_summarize_chain
from langchain_community.document_loaders import WebBaseLoader
from langchain_community.llms import LlamaCpp

loader = WebBaseLoader("https://tech-blog.cloud-config.jp/2023-12-23-mulit-gpu-pc-for-llm")
docs  = loader.load()

llm = LlamaCpp(
    model_path="モデルのファイルパス",
    n_ctx=3000
)

chain = load_summarize_chain(llm, chain_type="stuff")
result=chain.invoke(docs)
print(result["output_text"])

メモ

  • n_ctx=3000とサンプルコードではあり得ない数値を記載しているが、Webサイトに書かれている単語数(トークン)が単純に超えるためである

  • chainの結果はdictionaryで返すので、要約部分だけ抽出した。いくつか、要約しているwebの記事を見ているが、このことを言及しているところを見たことがない。そのため、ここはこの記事でいいところだと思う。OpenAIのChatGPTに接続しているときは、outputだけ出るのだろうか、謎である

  • また、chain.runと記述をしているところがあるが、コンソールの出力よりrunは非推奨なのでinvokeを使うようにとあったので使用した

print(result) # 試してみると分かるが大量の文字が出力される

結果

結果は下記の通り

要約内容

The article discusses the experience of using two GPUs to run a 13B LLM model on a self-built PC, with a focus on the configuration and performance of the machine. The author mentions that they have used two NVIDIA RTX A4000 GPUs to achieve the desired memory capacity for the model, which requires around 26GB of VRAM. The article provides a detailed explanation of the configuration and installation process, as well as the results of running the LLM model on the machine. The author also mentions that they have used the Quadro series of GPUs as a reference, but notes that the RTX A4000 is more convenient in terms of power consumption and space requirements. Overall, the article provides practical advice for those interested in building their own LLM models on self-built PCs.

翻訳

この記事では、マシンの構成とパフォーマンスに焦点を当て、2 つの GPU を使用して自作 PC 上で 13B LLM モデルを実行した経験について説明します。 著者は、モデルに必要なメモリ容量を実現するために 2 つの NVIDIA RTX A4000 GPU を使用したと述べていますが、これには約 26GB の VRAM が必要です。 この記事では、構成とインストールのプロセス、およびマシン上で LLM モデルを実行した結果について詳しく説明します。 著者は、GPU の Quadro シリーズをリファレンスとして使用しているとも述べていますが、消費電力とスペース要件の点で RTX A4000 の方が便利であると述べています。 全体として、この記事は、自作 PC で独自の LLM モデルを構築することに興味がある人に実践的なアドバイスを提供します。

出力時間

total timeが259809.84 msなので、259秒、4分程度、実測していないから分からないが、もう少し長いイメージだ。ながら作業か、お茶でも飲んで休憩しているといい

llama_print_timings:        load time =     907.86 ms
llama_print_timings:      sample time =      29.61 ms /   180 runs   (    0.16 ms per token,  6079.23 tokens per second)
llama_print_timings: prompt eval time =  223066.94 ms /  2181 tokens (  102.28 ms per token,     9.78 tokens per second)
llama_print_timings:        eval time =   35768.38 ms /   179 runs   (  199.82 ms per token,     5.00 tokens per second)
llama_print_timings:       total time =  259809.84 ms /  2360 tokens

参考

Summarization

Llama.cpp Usage

その他、いくつか

おわり!