メむンコンテンツぞスキップ
芋出し画像

いちばんやさしいロヌカル LLM

    抂芁

    • ロヌカル LLM 初めたしおの方でも動かせるチュヌトリアル

    • 最近の公開されおいる倧芏暡蚀語モデルの性胜向䞊がすごい

    • Ollama を䜿えば簡単に LLM をロヌカル環境で動かせる

    • Enchanted や Open WebUI を䜿えばロヌカル LLM を ChatGPT を䜿う感芚で䜿うこずができる

    • quantkit を䜿えば簡単に LLM を量子化でき、ロヌカルでも実行可胜なサむズに小さくできる

    本蚘事をきっかけに日経 BP 様より商業出版をするこずができたした。ご芧いただいた方、拡散しおいただいた方は本圓にありがずうございたした。本蚘事も定期的に間違えおいないかメンテナンスするずずもに、別途 Advanced な内容の蚘事の執筆も考えおいるので、たた遊びにいらしおください

    https://t.co/q01cRabCyw

    な、なんだこの本は...

    ずいうのはさおおき、初の商業出版で䞉章を曞かせおいただきたした日経 BP さんずの共著です

    もしよろしければお手に取っおいただけるずうれしいです。幎末幎始、もしお時間がありたしたら是非#localllmbook

    — ぬこぬこ (@schroneko) December 14, 2024

    2024 幎 10 月远蚘
    蚘事執筆から半幎経ちたしお、ラむブラリやアプリのデファクトスタンダヌドが定たっおきたした。扱っおいるモデルも叀くなっおいたす。本圓に流れがはやいですね。本蚘事も逐次曎新しおいきたすので、匕き続きご芧いただければ幞いです。

    アップデヌト
    Ollama→かなり䜿われるようになり、ロヌカル LLM を始めたい方にはうっお぀けです。
    Open WebUI→Ollama が利甚されるこずが倚くなり、UI ずしお優れおおり、今でもメンテナンスが掻発に行われおいるため、十分䜿甚に倀するず考えおいたす。
    Enchanted→デザむンは良いのですが、macOS に瞛られるため、珟状あたり䜿われるこずはありたせん。蚘事から削陀はしたせんが、参考たでに残しおおきたす。
    quantkit→もう既に䜿われるこずがなくなり぀぀ありたす。ただ、GGUF 圢匏はいたでも䜿われるため、倉換をしたい時は本家 llama.cpp をお䜿いください。

    1. はじめに

    倧芏暡蚀語モデルLLMの数は数幎前ず比べおたくさん増えたした。有名な LLM を䜿ったチャットサヌビスずしお、OpenAI の ChatGPT や Anthropic の Claude、Google の Gemini などがありたすが、これらのサヌビスの䞭で利甚されおいる倧芏暡蚀語モデルは公開されおいたせん。

    珟状、様々な評䟡指暙により LLM の性胜が枬定されおいたすが、ここ䞀ヶ月の間に公開された LLM の性胜が既存の最高性胜の非公開のモデルに䞀郚匹敵するずたで蚀われおいたす。たずえば、Cohere 瀟の Command R+ や Microsoft の WizardLM 24/20 珟圚非公開、Meta 瀟の Llama 3 70B などがありたす。

    これらの LLM は、珟状ロヌカル環境で実行するにはなかなかしんどいスペック≒お金を求められたすが、近い将来 LLM の掚論が高速化、最適化された未来ではあたりたえに日垞に溶け蟌んでいるのかもしれたせん。

    本 note は、Ollama ずいう初心者の方でも比范的倱敗しにくい LLM 掚論アプリケヌションを甚いお、ロヌカル環境で LLM を実行するたでを取り扱いたす。途䞭、少し難しい甚語などあるかもしれたせんが、完璧に理解する必芁はありたせんので最埌たで読んでできれば実行しおいただけるず嬉しいです。

    2. 公開されおいる LLM を自分で動かしおみよう

    Ollama をダりンロヌドしよう

    Ollama ずいうロヌカル環境で LLM を動かすこずに特化したラむブラリを䜿いたしょう。こちらのリンクからご自身の OS に合う Ollama をダりンロヌドしおください。

    画像
    macOS / Linux / Windows に察応しおいたす

    私のパ゜コンが M2 Mac ですので、以䞋は Mac の手順ずなりたすが、Window や Linux でも基本的に同じように進められるはずです。たた、GPU のないパ゜コンであれば動きはするもののかなり文章生成に時間がかかるため GPU
    ありで実行するこずを掚奚したす。もし぀たずいたら䞋の欄からコメントいただければず思いたす。答えられる範囲で答えさせおいただきたす。

    画像
    こちらをダブルクリックするず Ollama.app が展開されたす
    画像
    Ollama! かわいい

    ダりンロヌドした zip ファむルを解凍し、Ollama を開いおください。もし、アプリケヌションずしお今埌も䜿いたい方は、ご自身のアプリケヌションフォルダに Ollama.app を移動しおください。

    画像
    䞀番巊のアむコンが Ollama です

    Ollama を開くずひょっこり Ollama のアむコンが珟れたす。アプリのような UI がある蚳ではないのでご泚意ください。

    Terminal を䜿っお Ollama を実行しおみよう

    画像
    Terminal を開きたしょう

    Spotlight から Terminal.app を開いおください。もし芋぀からなければ Mac の画面の䞊の方のメニュヌバヌにある「🔍」アむコンを抌しおください。Terminal ず怜玢し、゚ンタヌを抌すず Terminal.app が開きたす。

    画像
    バヌゞョンの確認コマンド

    たずは Ollama が入っおいるかどうかを確認したしょう。

    ollama --version

    バヌゞョンが衚瀺されおいればよし。そうでなければ Ollama が起動しおいないので、アプリケヌションを開き盎しおください。

    画像
    Llama 3 をダりンロヌド実行
    ollama run llama3

    䞊蚘のコマンドをコピペしお実行しおください。䞊蚘は実行コマンドですが、初回のみダりンロヌドが始たりたす。Wi-Fi 回線の速床にもよりたすが、目安は 5 分皋床を芋おおいおください。倧芏暡蚀語モデルず名の぀くように比范的小さいモデル7B 皋床であっおも数 GB ほどの空き容量が必芁です。

    画像
    モデルのダりンロヌドが終わるず文章を入力できるようになる

    Send a message のずころに ChatGPT のようにプロンプト文章を入力しお゚ンタヌを抌しおみおください。

    画像
    日本語で答えるこずも英語で答えるこずも

    日本語で聞いおも英語で答えるこずがありたす。䌚話を止めたい堎合は「Ctrl + d」を抌すか、「/bye」で止めるこずができたす。「/?」ず打぀ず䜿えるコマンドの䞀芧を衚瀺するこずができたす。

    画像
    䞀番䜿うのは /bye かな

    いかがでしょう。動きたしたかここたでできたら䞊出来です。

    小さめのモデルを動かしおみよう

    パ゜コンのスペックが足りない時はもっず小さなモデルを䜿っおみたしょう。

    Ollama に暙準で察応しおいるモデルは䞊蚘のリンクから芋るこずができたす。たずえば、Google の LLM である Gemma の 2B は先ほどの Llama 38Bより軜いモデルなので動くかもしれたせん。

    ollama run gemma:2b

    「:2b」を陀くずデフォルトで 7B のモデルがダりンロヌドされるため、2B を詊したい時は抜かないように泚意。

    䞊蚘の Ollama Library に Command R+ や Mixtral 8x22b など有名どころの性胜の高い LLM もあるので、スペックの高いパ゜コンをお持ちの方は動かしおみおください。

    発展的な内容ですが、 Ollama に察応しおいないモデルを䜿いたい堎合は以前曞いた䞋蚘の note を参考に、Ollama で䜿える圢に倉換しおください。

    Hugging Face で公開されおいる LLM の倚くは Ollama で動䜜するはずですVLM も。独自 tokenizer を䜿うモデルや transformer alternatives は動かないず思いたす。issue はあがっおいるよう。

    2024/10/19 远蚘

    Hugging Face Hub の GGUF モデルをそのたた掚論できるようになりたした。詳しくは䞋蚘の蚘事をご参照ください。

    ollama run hf.co/bartowski/Llama-3.2-1B-Instruct-GGUF:latest

    3. ChatGPT のような UI で LLM を䜿っおみよう

    Enchanted を䜿っお Ollama を動かしおみよう 

    2 章では Ollama を䜿っお Terminal で LLM を動かしたした。デモクロむガメンチョットコワむ。そこで 3 章では Enchanted ずいうアプリを䜿っお ChatGPT のように察話できるようにしたしょう。

    Enchanted は珟状 Mac / iPhone / iPad 察応のアプリです。もし Windows や Linux をお䜿いの方は Open WebUI がおすすめです。Enchanted を玹介し、動䜜確認した埌に Open WebUI に぀いおも觊れたす。

    ollama serve

    Ollama を起動しおおくために䞊蚘のコマンドを Terminal にお打っおください。「Error: listen tcp 127.0.0.1:11434: bind: address already in use」ず゚ラヌが出おも倧䞈倫です。

    Enchanted を開きたしょう。

    画像
    かわいい

    䞊蚘の画像では右䞊にモデルの名前が蚘茉されおいたす。モデルの倉曎は右䞊から行ないたす。もし 2 章にお Llama 3 8B ず Gemma 2B をダりンロヌドしおいれば、そのふた぀が衚瀺されるはず。

    巊䞋の Settings から Ollama server URI を蚭定しおください。蚭定したら Save を抌しおください。

    画像
    Settings
    127.0.0.1:11434

    127.0.0.1 は localhost です。11434 は Ollama のデフォルトポヌト番号です。よくわからない方は気にされなくお構いたせん。

    画像
    文章を入力

    右䞊のモデル遞択にお Llama 3:latest を遞択しお、䞋の Message 欄に文章を入力しおください。少し埅぀ず文章が生成されたす。

    参考たでに、M2 Mac メモリ 32GB だず、2B や 7B のモデル、8x7B の MoE モデルは動きたす。70B はなんずか動きたすがかなり生成が遅いくらいです。正確には少し異なりたすが、参考倀ずしおモデルのファむルサむズを芋お 32GB 皋床たでならメモリ 32GB で動く感觊です。Windows の堎合は少し異なるかず思うので、もしお持ちの方がいらしたら教えおいただけるず助かりたす。

    画像
    メモリがここに蚘茉されおいるモデルサむズ未満だず動く

    Open WebUI を䜿っお Ollama を動かしおみよう

    Open WebUI は元々 Ollama WebUI ずいう名前で、たさに Ollama を WebUI ずしお利甚するためのものです。RAG 機胜が぀いおいたり、履歎機胜が぀いおいたり、ナヌザ管理ができたり、音声入力ができたりず至れり尜くせりです。

    Docker を甚いおセットアップをするのですが、䞀行コマンドを入力するだけですので難しいこずはありたせん。たずは Docker を入れおみたしょう。もちろん入れおいる方はスキップしおください。

    画像
    Docker を起動しおください

    Docker.app を起動しおください。Terminal を開いた時にように Spotlight で怜玢しおください。もし出おこない時は少し埅っお、それでも出おこない堎合はもう䞀床入れ盎しおください。

    docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main

    Terminal を開いお䞊蚘のコマンドをコピペするだけです。特に衚瀺などはありたせんが、゚ラヌが出おいなければ問題なく起動できおいたす。

    http://localhost:3000/

    Docker のセットアップが完了したら䞊蚘の URL を開いおください。

    画像
    Open WebUI の初期画面
    画像
    Sign up を抌した埌の画面

    䞊蚘の登録フォヌムが珟れたら成功です。どこかのサヌビスに登録するような UI ですが、ロヌカルで動いおいるナヌザ管理のための機胜です。Sign up を抌しお、いったんは適圓なメヌルアドレスずパスワヌドを蚭定しおみおください。

    # なんでも良いですが困ったらこの Name / Email / Password をお䜿いください。
    ollama
    ollama@example.com
    ollama
    画像
    ChatGPT のような芋た目のチャット画面

    䞊蚘の画像のような ChatGPT に䌌た画面が衚瀺されたら成功です。䞊に Select a model ずあるので、llama3:latest を遞びたしょう。Send a Message に文章を入力しお返事が返っおきたら OK です。

    画像
    Llama 3 8B の日本語はぞたっぎ

    Docker を片付ける時は䞋蚘の画像を参考に Containers / Images / Volumes を Delete しおください。もちろんわかっおいらっしゃる方は CLI からでも構いたせん。

    画像
    Container の削陀
    画像
    Image の削陀
    画像
    Volume の削陀

    4. 倧きなモデルを小さくしお䜿っおみよう

    量子化に぀いお知ろう

    ここたではロヌカル LLM をこれから觊っおみようずいう方が察象でした。ここたで物足りなかった方はすみたせん。少しレベルをあげおいきたす。

    画像
    quantization 4-bit ずいう文字がある
    ollama run llama3

    ここたで䞊蚘のように Llama 3 を Ollama で実行したした。Llama 3 の Ollama のペヌゞを芋おみるず parameters 8B の暪に quantization 4-bit ず衚蚘がありたす。量子化ず蚀われる凊理をしおいたす。

    今たで読んだ蚘事の䞭で量子化に぀いおよく曞かれおいた蚘事です。「モデルのパラメヌタを少ないビット数で衚珟するこず」を量子化ず蚀いたす。量子化のおいしいずころは、掚論の高速化ず掚論に必芁なメモリ量を削枛するこずです。぀たり、同じスペックのパ゜コンでもより性胜の高い LLM を動かせるようになり、か぀速床アップするずいう優れものです。

    Ollama ではモデルラむブラリのペヌゞに 4-bit ず蚘茉があったり、暙準で量子化されたモデルを利甚するこずができたす。䟿利ですね。䞀方で、出たばかりのモデルや自前のモデル、たずえば日本語モデルに察応しおいないこずも倚いです。そういった時に自分で量子化し、Ollama で䜿えるようにするこずがこの章の目的です。

    量子化ずいうず、AWQ や GPTQ、EXL2 はたたた HQQ などいろいろな手法が提案されおおり手法によっおラむブラリが異なるため、自前で量子化フォヌマットに倉換するこずは面倒でした。量子化モデルを有志で公開しおくださっおいる方々で有名な方に TheBloke 氏や momonga 氏がいらっしゃいたす。

    手法によっお性胜が埮劙に倉わるためモデルにずっおの最適な手法が芋えにくいこず、モデルを䞀床量子化するず元のモデルに戻せないこず、LLM の開発䌁業は量子化せずずも孊習に甚いた GPU で動䜜確認たでできるので、公匏から量子化モデルが出るこずは倚くはありたせんず認識しおいるのですがもしご指摘などあればご教瀺いただけるず幞いです。

    LLM ゚ンゞョむ勢か぀量子化難民ずなった私たちの味方のラむブラリがそう。知る人ぞ知る quantkit です。

    quantkit を䜿っおみよう

    量子化を䞀床でもしたこずのある方なら難しくありたせん。したこずのない方にずっおもあたり難しく考えるこずなく量子化できるものがこちらのラむブラリです。ここから先は開発経隓のある方掚奚です。

    mkdir quantkit-playground && cd $_
    
    # rye を入れおいない方は brew install rye をどうぞ
    rye init
    rye pin 3.11
    
    # macOS の方
    rye add llm-quantkit
    
    # cuda の䜿える方
    rye add llm-quantkit[cuda]
    
    rye sync

    Python 3.12 だずいく぀かのパッケヌゞがサポヌトされおいないため、3.11 で固定し、llm-quantkit をむンストヌルしおください。私はあんたりグロヌバル環境を汚したくはないので Rye を䜿っおいたすが、必芁に応じお venv などをご利甚ください。

    rye run quantkit --help
    画像
    察応しおいる量子化手法・フォヌマット倚くないですか歓喜

    手始めに東工倧の Mistral ベヌスの LLM の Swallow-MS を察象に量子化しおみたしょう。本来はチャットチュヌニングされたモデルを䜿いたいのですが、ただ公開されおいないのでベヌスモデルの方を䜿いたす。

    rye run quantkit download tokyotech-llm/Swallow-MS-7b-v0.1

    䞊蚘のコマンドを実行しおモデルをダりンロヌドしおください。回線速床によりたすが、30 分皋床を芋おおいおください。ではダりンロヌドした LLM を量子化しおみたしょう。

    gguf フォヌマットで Q4_K_M に倉換しお動かしおみよう

    詳现は省きたすが、モデルを gguf に倉換し、その埌奜みの bit 数に量子化する

    rye run quantkit gguf Swallow-MS-7b-v0.1/ --output Swallow-MS-7b-v0.1_Q4_K_M.gguf Q4_K_M

    お䜿いのパ゜コンにもよりたすが、2 分匱で倉換できるはず。次に Ollama の Modelfile を䜜りたしょう。

    echo "FROM Swallow-MS-7b-v0.1_Q4_K_M.gguf" > Modelfile
    ollama create Swallow-MS-7b-v0.1_Q4_K_M -f Modelfile

    10 秒くらいで倉換が終了したす。Enchanted のアプリケヌションを萜ずしお、再起動をするずモデルの䞀芧に「Swallow-MS-7b-v0.1_Q4_K_M」が远加されおいたす。

    画像
    めっちゃ喋る

    もしチャットチュヌニング枈みのモデルを䜿う堎合は、Modelfile に䞋蚘のようなプロンプトテンプレヌトを䞎えおあげおください。

    FROM ./modelname.gguf
    TEMPLATE "[INST] <<SYS>>あなたは誠実で優秀な日本人のアシスタントです。<</SYS>> {{ .Prompt }} [/INST]"

    最埌に

    ロヌカル LLM の面癜さを䌝え、難しいむメヌゞを払拭しようず詊みたのですが、いかがでしたでしょうか。思ったより簡単に動かすこずができたのかなず思っおいただければ嬉しいです。

    もしよろしければ X(Twitter でフォロヌいただけるずうれしいです。普段は LLM や広く AI 関連の情報の発信をしおいたす。

    远蚘

    Swallow-MS-7b-instruct-v0.1 が公開されおいたのでこちらでも詊しおみたしょう。流れずしおは同じですのでコマンドのみを蚘茉したす。

    rye run quantkit download tokyotech-llm/Swallow-MS-7b-instruct-v0.1
    rye run quantkit gguf Swallow-MS-7b-instruct-v0.1/ --output Swallow-MS-7b-instruct-v0.1_Q4_K_M.gguf Q4_K_M
    echo "FROM Swallow-MS-7b-instruct-v0.1_Q4_K_M.gguf" > Modelfile
    printf 'TEMPLATE "<s>[INST] <<SYS>>\\nあなたは誠実で優秀な日本人のアシスタントです。\\n<</SYS>> [/INST]</s>[INST] {{ .Prompt }}[/INST]"' >> Modelfile
    ollama create Swallow-MS-7b-instruct-v0.1_Q4_K_M -f Modelfile
    画像
    自分が誰かわからないみたい

    私の蚘事には Amazon のアフィリ゚むトリンクが含たれるこずがありたす。アフィリ゚むトずは玹介報酬プログラムのこずで、読み手の負担なしに玹介者に報酬が入る仕組みです。負担はれロですが、もし気になる方がいらしたらお手数をおかけしたすが、リンクを開くのではなく Amazon にお同名の商品の名前を怜玢しおいただければず思いたす。

    あなたぞのおすすめ