見出し画像

【RTX3060×2】Gemma4 26B A4Bを使ってみた話⑤【ollama】

はじめに

前回のつづきです。

ollamaのアップデート(v0.20.4)があり、ついに正常なパフォーマンスで動作するようになりました。

以前のバージョンまでは、FA(Flash Attention)に未対応という事もありましたが、メモリの余裕関係なく、多くの処理がCPUにフォールバックしてしまい、長文を扱う場合に、現実的な速度で処理できませんでした。実質的な最大コンテキストサイズも64kに制限されていました。

アップデート後は、Flash Attention+Q8_0 KVキャッシュの量子化設定する事で、筆者のRTX 3060 12×2=24GB VRAM環境において128k程度のコンテキストを扱えるようになりました。

# 環境変数
OLLAMA_FLASH_ATTENTION=1
OLLAMA_KV_CACHE_TYPE=Q8_0

※ ただし、Gemma4 26B版は、ファイルサイズだけで17GBあるので、VRAM 16GB環境のメモリ上にすべて収まりません。それでもCPUが十分に高速な場合は、MoEなので現実的な速度で動作しますが、本来のGPU動作のパフォーマンスから大きく低下してしまいます。現状ではより高度な設定が可能なLM Studioの方が快適に利用できると思います。

Ollama版でも128kコンテキストで利用できるようになった件

単純に動作させるのであれば、MoE用の設定が可能なLM Studioの方が一枚上手です。調整次第で最大の256kコンテキストでも高速動作します。

しかし何かとollamaでしか出来ない事も多く、ollamaで高速動作する事は、筆者にとって重要です。

# ollama版ダウンロード
ollama pull gemma4:26b

# 情報表示
ollama show gemma4:26b
  Model
    architecture        gemma4    
    parameters          25.8B     
    context length      262144    
    embedding length    2816      
    quantization        Q4_K_M    
    requires            0.20.0    

  Capabilities
    completion    
    vision        
    tools         
    thinking      

  Parameters
    temperature    1       
    top_k          64      
    top_p          0.95    

  License
    Apache License               
    Version 2.0, January 2004
num_ctx=128kならGPUに収まり
GPUの利用率も、以前の2倍以上に

llama.cppはメモリ合算はできても動作速度が2倍にはなりません。なので仕様上(想定どおり)のボトルネック無しの動作です。128k利用では、LM Studioとほぼ同じパフォーマンスです。

※ 一方で、Blender等のGPU並列処理では、動作速度が2倍になりますが、メモリが2倍になりません

テスト生成
68 token/s

約70 token/sは、十分すぎる速度です。

リアルにコンテキストを填めても、33 token/sで動作しました。前ollamaバージョンでは、この処理は数時間でも終了しませんでした..

88kトークン(約10万日本語文字)の要約

Linux+Ollamaは何が便利か?

もちろんOpen WebUIを利用すると、ollamaがデフォルトのバックエンドなのでollamaと相性が良いのは当たり前なのですが、それ以外にも、筆者のようにLinux中心の使い方をすると、便利な事が多くなります。

特にコマンドラインで利用する場合は、ollamaがシンプルで最も使いやすいと思います。

Linuxシェル操作と相性が良い

筆者の環境はLinuxデスクトップなので、頻繁にインタラクティブ・シェルを使います。コマンドのollamaとは非常に相性が良いです。たとえば.bashrc等にエイリアス

# 対応モデルでは --think=false/true で制御できます
alias llm="ollama run gemma4:26b --think=false"

を書いておけば、llm <プロンプト>で気軽に利用できます

翻訳する場合

llm "「孤独に歩め。悪をなさず、求めるところは少なく。林の中の象のように。」を英語に翻訳して"

$ llm "「孤独に歩め。悪をなさず、求めるところは少なく。林の中の象のように。」を英語に翻訳して"

このフレーズは、仏教の教え(法句経/ダンマパダ)に基づいた非常に有名な一節ですね。
文脈や、どのような響きにしたいかによっていくつかの翻訳パターンが考えられます。

### 1. 最も標準的・古典的な翻訳(格言らしい響き)
聖典の翻訳などでよく使われる、重みのある表現です。
> **"Walk alone. Do no evil. Desire little. Like an elephant in the forest."**
*   **解説:** 短い単語を並べることで、格言としての力強さと、潔い(いさぎよい)ニュアンスを出しています。

### 2. 詩的で情緒的な翻訳(文学的な響き)
物語や詩の中で、内省的な雰囲気を出したい場合に適しています。
> **"Walk in solitude. Commit no wrong, and let your desires be few. Just as an elephant wanders through the forest."**
*   **解説:** `solitude`(孤独・独居)という言葉を使うことで、寂しさではなく「高潔な孤独」というニュアンスが強まります。`wander`(さまよう)を加えること
で、象のゆったりとした動きが目に浮かぶような表現になります。

### 3. 現代的で分かりやすい翻訳(シンプル)
現代の英語として、スッと意味が入ってくる表現です。
> **"Walk your own path. Do no harm, and seek after little. Like an elephant in the woods."**
*   **解説:** `Walk your own path`(自分の道を行け)とすることで、「孤独に歩め」の意図(自立)をより明確に伝えています。

---

ネット情報を簡易的に調べる場合

固定サイトの情報であれば、MCPや複雑な検索ツール、エージェントを利用する必要はありません。特に128k程度の大コンテキストサイズであれば、複数のサイトをそのまま読み込み要約できます。整形せずにそのままプロンプトに流し込みます。

# ニュースサイトのhtmlを取得
news=`w3m -dump https://news.***.co.jp`

# LLMに食べさせる
llm "ニュースをリストアップして --- $news"
ただし、JavaScriptを利用する多くのサイトは読み込めません

コマンドオプションを調べる場合

Linux(unix)では、manコマンドでオプションなどを調べられます。しかし、英語である事も多く、システム技術者や慣れたコマンドでない限り万人にとって使いやすいとは言えません。そこで、必要な機能のみをLLMに教えてもらいます。

※ 有名なコマンドであればLLMモデル内の知識だけで十分ですが、マイナーなコマンドや頻繁にオプションが変更される最近のコマンドの場合は、マニュアルを食べさせるとより確実になります。

PDFを操作するpdfコマンドのマニュアル(man qpdf)

llm "pdfを一枚ずつバラバラにするコマンドを教えて --- $(man qpdf)"

$ llm "pdfを一枚ずつバラバラにするコマンドを教えて --- $(man qpdf)"

これは `qpdf` のマニュアルページの内容ですね。
ご質問の「PDFを一枚ずつバラバラにするコマンド」という操作は、`qpdf` の機能の一つである **ページ分割(Splitting)** に該当します
。
マニュアルの **MODIFICATION** セクションに、この機能に関する項目があります。

=== QPDFによるページ分割の方法 ===
使用すべきオプションは `--split-pages` です。
### 構文 (Syntax)

```bash
qpdf [入力PDFファイル] --pages --split-pages=1 [出力ファイル名のベース]
```

### 解説
1.  **`qpdf`**: コマンド名です。
2.  **`[入力PDFファイル]`**: 分割したいPDFファイルの名前を指定します。
3.  **`--pages --split-pages=1`**:
    *   `--pages`: ページ処理を開始するオプションであることを示します。
    *   `--split-pages=1`: これにより、各ページが個別のファイルとして出力されるように指示します。
4.  **`[出力ファイル名のベース]`**: 出力ファイル名のパターンを指定します。

### 実行例
例えば、`input.pdf` というファイルを1ページずつバラバラにして、`page_` というプレフィックスを付けたPDFファイル群として出力した
い場合を考えます。

```bash
qpdf input.pdf --pages --split-pages=1 page_%d.pdf
```

画像生成のメタ情報を確認する場合

ComfyUIなどで画像や動画を生成すると、利用したワークフローの情報がメタ情報として保存されていますが、そのまま表示すると制御文字なども混ざるので、単純コピペできません。LLMに処理してもらいます。

※ 画像内のメタ情報を表示する場合は、ImageMagickパッケージのidentifyコマンドが便利です。

llm "画像のメタ情報からプロンプトだけを抜き出して。--- $(identify -verbose Qwen-Improved-Action-_00001_.png)"

$ llm "画像のメタ情報からプロンプトだけを抜き出して。--- $(identify -verbose Qwen-Improved-Action-_00001_.png)"
### 抽出されたプロンプト

===
A high-angle cinematic action shot of a Japanese office lady in a sharp black business suit, soaring at supersonic speeds through a sea of clouds. She 
is propelled by visible teal psychic energy trails swirling around her body. Below her, a massive commercial jumbo jet streaks through the atmosphere, 
creating huge contrails. Her hair and suit jacket flutter violently in the extreme wind. Intense, determined facial expression. Low-angle sunlight 
piercing through the clouds, creating dramatic lens flares and high-contrast shadows. Hyper-realistic, 8k, masterpiece, motion blur, extreme depth of 
field, highly detailed textures of the suit and jet fuselage.
===

---

### メタ情報からの確認点

*   **プロンプトの格納箇所**: メタ情報内の `png:text: ...` のセクションの `prompt` キーにJSON形式で格納されています。
*   **具体的なテキスト**: 抽出されたテキストがメインのプロンプトです。

まとめ

日本語の一般用途であれば異常に性能が高いGemma4 26B(A4B)ですが、16GB VRAMでは溢れてしまう残念なサイズです。

※ もちろん上述したように、16GB VRAMでもLM Studioを調整すれば、64kコンテキストで快適以上に動作します

多くのゲーミングPCのVRAM容量である8〜16GBでollama高速運用する場合は、E4B版(実質8B)が良いと思います。

以下、関連する記事の【PR】です。


いいなと思ったら応援しよう!