はじめに
UGREENのNAS(DXPシリーズ)など、近年の高スペックNASはローカルLLMを動かすポテンシャルを秘めています。 本記事では、Dockerを用いたローカルLLM環境の構築手順と、Cloudflare Tunnelで外出先から安全にアクセスするまでの全工程をまとめます。
構築の前提:リソース設計
NASでローカルLLMを実用レベルで動かすには、以下の構成が鍵となります。
- メモリ: 32GBへの換装を強く推奨。 モデルをRAM上に完全常駐させます。
- ストレージ: モデルデータのロードを高速化するため、NVMe SSD領域をボリュームに割り当てます。
- 外部アクセス: ポート開放は行わず、Cloudflare Tunnelでセキュアな経路を確保します。
docker-compose.yml
volume3は各自割り当て場所に読み替えてください。volume3にモデルデータ含め割り当てる例です。いつもながら、ollamaとopen-webuiフォルダはあらかじめ作成しておくこと。
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
volumes:
- /volume3/docker/ollama:/root/.ollama # 高速なSSD領域を推奨
ports:
- "11434:11434"
environment:
- OLLAMA_KEEP_ALIVE=24h # メモリ32GBなら常駐させて即レス環境を構築
restart: always
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
depends_on:
- ollama
ports:
- "3001:8080"
environment:
- 'OLLAMA_BASE_URL=http://ollama:11434'
- 'WEBUI_SECRET_KEY=your_secure_random_key' # 任意の文字列
volumes:
- /volume3/docker/open-webui:/app/backend/data
restart: always
Cloudflare Tunnelによる外部公開
外出先のモバイル端末から安全にアクセスするための設定です。
- Cloudflare側: Dashboardの「Zero Trust > Access > Tunnels」から新規作成。
- コネクタ設置: NAS上のDockerで cloudflared コンテナを動かす。
- Public Hostname設定: Service: http://[NASのIP]:3001 を指定。
- セキュリティ: 複雑なパスワード設定に加え、必要に応じてCloudflare Accessでの認証を追加。
モデルのロードと運用
内部LAN内なら、http://[NASのIP]:3001にアクセスし、Open WebUIにログインし、モデルのロードを行います。
- 常駐の恩恵: OLLAMA_KEEP_ALIVE=24h に設定しておくことで、外部からアクセスした際もモデルのロード待ちが発生せず、即座に推論が始まります。
まとめ
インフラ、メモリ、セキュリティを整えることで、NASは単なるストレージから「自分専用のプライベートクラウドAI」へと進化します。 ポータブルな最強知能をポケットに入れて持ち歩きましょう。
結果
UGREEN NAS DXP480T Plus上でgemma4:26bをロードしてみた。
CPU:Core i5 1235u メモリ:DDR5 32GB(16GB×2枚) ストレージ:m.2 nvme Gen3 250GB
6.33token/s CPUのみで健闘してる方だが、やはり体感遅い。このモデルだと厳しいかな。 VRAMを持たないNAS(CPU推論)では、メモリ帯域がボトルネックになる。実用性を取るなら、軽量モデルにするか、素直にGPUを利用したほうがよいと思う。
