Upgrade to Pro — share decks privately, control downloads, hide ads and more …

RでローカルLLM

HIGUCHI, Chihiro
December 09, 2024
300

 RでローカルLLM

HIGUCHI, Chihiro

December 09, 2024
Tweet

Transcript

  1. 2023年のローカルLLM利用事情 • 動かすだけでも高性能なGPU搭載PCが必要だった • A100クラスのGPUが何枚も必要とされた→1千万円以上? • RNNベースのRWKVモデルの登場 • https://note.com/shi3zblog/n/na991171b8fdd •

    Transformerは計算量が膨大 • 本環境はたしかA6000無印 (48GB)を使用→それでも高額 • SLMと呼ばれる小規模な言語モデルの登場 • 量子化手法によるメモリ節約 • 16ビット浮動小数点精度を諦め8ビットで格納量を2倍にする • Bitnet(1.58bit)への淡い期待 …
  2. 2024年になると状況は一変 • Ollamaを使えば非GPU PCでも容易にローカルLLM利用可 • ほかにもLMstudioやvLLM、MLX(Apple silicon) • Ollamaで使えるLLMは https://ollama.com/libraryで公開

    • 今春(2024/5)の大阪24時間AIハッカソンでollamaを使用 • https://note.com/shi3zblog/n/n1c5313748849 • 64GB搭載のMacBookProでCohereのCommand-Rモデル利用 • https://pc.watch.impress.co.jp/docs/column/nishikawa/1582380.html • レスポンスは問題なし • GPUがあるならあったほうが速いが、モデルがロードできないと意味がない • モデルサイズ59GBのCommandR+の利用は本環境では厳しい • CommandR-35Bは19GB→24GBVRAMのGPUでも厳しい? • コンシューマー用GPUは大きくてVRAM容量は16GB→8GB前後のモデルまで?
  3. https://ollama.com/library/llama3.1 何故ローカルLLMにこだわるか? • 個人情報データ解析の現場ではインターネットが使えない • プロトタイプ試作時の頻繁な利用 • プロンプト(文脈内学習)の検証 • 大規模(パイプライン)なアクセス検証

    • 公開されたローカルLLMの利用は無料 • トークン⾧(文脈内学習に大きく影響) • GPT-4oの最大トークン⾧は8192 • Geminiの最大トークン⾧はとても大きいがGemmaはそうでもない • Llama3.1の最大トークン⾧は128k • 128kのトークンを与えてちゃんと動くかどうかは別 • トークン⾧が多いと商用LLMの場合はAPI利用料が膨大 • ⾧文プロンプトによる文脈内学習(ICL)はRAGを凌ぐという報告も • RAG(Retrieval Augmented Generation) • 外部データベースによる情報から生成AIを使用しハルシネーションを抑制する試み
  4. Ollamaのインストールと起動(Ubuntu) • Ollamaのインストールとサービス起動 • シェル • Curl –fsSL https://ollama.com/install.sh |

    sh • Sudo systemctl start ollama • Docker • docker run -d [--gpus=all] -v ollama:/root/.ollama -p 11434:11434 -- name ollama ollama/ollama • Singularity (上記Dockerイメージを変換) • sudo singularity build ollama.sif docker-daemon://ollama/ollama • singularity exec –nv ollama.sif ollama serve • http://XXX.XXX.XXX.XXX:11434/にアクセス
  5. OllamaでLLMを利用 • スタンドアローンで利用 • ollama pull <model> (https://ollama.com/library) • ollama

    run <model> • ネットワークを介しての利用 • curlでhttp://xxx.xxx.xxx.xxx:11434/をアクセス • Open WebUI • Python/JS (正式サポート) • LangChain、LlamaIndex • Dify、Replit、Bolt.new-multiLLM • Emacs • R! • Rollama/cranパッケージ • https://github.com/cran/ollamar→localhostだけしかアクセスできない? • 注意点 • LLMへ渡すトークン⾧が規定値2048→制限解除が必要(num_ctx)
  6. rollamaパッケージ • ライブラリのロード • library (rollama) • 接続 • options

    (rollama_server = “http://example.com:11434/”) • LLMの導入 • pull_model (“nemotron”) # ollama側でpullするので使わない • 導入したローカルLLMの一覧 • list_models () • モデルの指定 • options (rollama_model = “llama3.2-vision”) • options (rollama_model = “7shi/tanuki-dpo-v1.0”) • チャット • new_chat () • query (q = <プロンプト文字列>, model_params = list (num_ctx = XXXX))
  7. 動作環境 • PC • DELL XPS 8950 / 32GB RAM

    / GeForce RTX 3070 (8GB) • OS • Ubuntu 24.04 LTS • Ollama • Version 0.4.5 • 一昨日ollama 0.5.0ローンチ • Json出力 • Llama 3.3 70b (42GB) → 本構成では実施不可
  8. 文脈内学習(In Context Learning) • Zero-shot • 具体例を与えず照会 • Few-shot •

    具体例を一例与えて照会 • Chain of Thought (CoT) • 推論プロセスを指示 • 単語の中に特定の文字がいくつ含まれるかは1文字づつにして文字を調べる • Sapporo.RやYakitori.Rの中にRはいくつある?