EC2 G系インスタンスで Gemma3 & Ollama のセットアップ と 検証

社内の雑談チャンネルでGemma3が話題になっていたのをきっかけに、試してみました！  


## はじめに

2025年3月にGoogleが発表した最新の軽量LLM「Gemma 3」は、Geminiと同じ技術基盤を持ちながらも、ローカル環境での実行に最適化されたモデルとして注目を集めています。高度な日本語処理能力、128Kトークンのコンテキスト、関数呼び出しや構造化出力への対応など、ビジネスユースを強く意識した設計がなされており、Ollamaなどのツールと組み合わせることで、誰でも簡単にローカルでの実行が可能です。

本記事では、AWSのGPU搭載EC2（G系）インスタンス上にOllamaとGemma 3をセットアップし、社内利用向けのAI環境を構築する手順を紹介します。  
クラウドAPIに依存せず、**社外秘データや顧客情報を自社内で安全に処理できる点**、そして**推論コストが実質ゼロになる点**は、特に大きなビジネスメリットと言えるでしょう。

生成AIの運用を「クラウド利用」から「自社内運用」へとシフトさせたい企業・開発者にとって、Gemma 3 + Ollama の構成は有力な選択肢となるはずです！

### Ollamaを選ぶ理由

- **簡単なセットアップと直感的なAPI**  
  シンプルなCLIとREST APIで、数行のコマンドでモデルを起動・実行可能。Gemma 3にもいち早く対応。

- **多様なモデルへの対応**  
  Gemmaだけでなく、LLaMA、Mistral、Command Rなど主要なオープンソースLLMをサポートしており、将来的な切り替えも柔軟。

- **最適化されたメモリ管理と高速な推論**  
  INT4量子化対応により、`g6.xlarge`（NVIDIA L4 GPU, 24GB VRAM）でも12B〜27Bモデルが安定動作。

### 他の選択肢と選ばなかった理由

| ツール                      | 採用しなかった理由                                                                           |
|-----------------------------|----------------------------------------------------------------------------------------------|
| **Transformers + vLLM**     | 高性能だが初期セットアップが複雑で、モデルごとの最適化・量子化処理が手間。シンプルなプロトタイピングには不向き。 |
| **LM Studio**               | GUIベースで手軽だが、サーバー用途（API提供や複数ユーザー対応）には不向き。Ubuntuサーバーでは運用しにくい。 |
| **Text Generation WebUI**   | 多機能だがWebベースのフロントエンド用途寄りで、Ollamaのような軽量なAPI利用が前提の設計には向かない。       |
| **llama.cpp**               | 超軽量でローカル向きだが、モデル変換やCLI操作が煩雑で、EC2環境での運用にはオーバーヘッドが大きい。             |
| **TGI (Text Generation Inference)** | 高速かつスケーラブルだが、大規模環境前提の設計で、`g6.xlarge` ではリソース効率がやや過剰。                  |

## インスタンス選択

G系インスタンスには以下のシリーズがありますが、モデルサイズと用途に応じて適切なタイプを選択することが重要です。

### G4dn シリーズ（NVIDIA T4 GPU）

- **推奨**: g4dn.xlarge（4 vCPU, 16GB RAM, 16GB GPU メモリ）
- **コスト目安**: 約\$0.526/時間（オンデマンド、東京リージョン）
- **適したモデル**: Gemma3-4B
- **用途**: 開発・テスト環境、小～中規模モデルの実行
- **特徴**: コストパフォーマンスが良好、エントリーレベルのGPUコンピューティング

### G5 シリーズ（NVIDIA A10G GPU）

- **推奨**: g5.xlarge（4 vCPU, 16GB RAM, 24GB GPU メモリ）
- **コスト目安**: 約\$1.006/時間（オンデマンド、東京リージョン）
- **適したモデル**: Gemma3-12B, Gemma3-27B（量子化使用時）
- **用途**: 本番環境、中～大規模モデルの実行
- **特徴**: 高いGPUメモリ容量、安定したパフォーマンス

### G6 シリーズ（NVIDIA L4 GPU）

- **推奨**: g6.xlarge（4 vCPU, 16GB RAM, 24GB GPU メモリ）
- **コスト目安**: 約\$0.944/時間（オンデマンド、東京リージョン）
- **適したモデル**: Gemma3-12B, Gemma3-27B（量子化使用時）
- **用途**: 最新のモデルに最適、電力効率重視
- **特徴**: 最新世代GPU、電力効率が優れている

### P3 シリーズ（NVIDIA V100 GPU）

- **例**: p3.2xlarge（8 vCPU, 61GB RAM, 16GB GPU メモリ）
- **コスト目安**: 約\$3.06/時間（オンデマンド、東京リージョン）
- **適したモデル**: Gemma3-27B（量子化時）、複数モデルの学習や推論
- **用途**: 大規模推論や並列学習、研究開発
- **特徴**: V100 GPU搭載、性能は高いがコストも高め

### P4 シリーズ（NVIDIA A100 GPU）

- **例**: p4d.24xlarge（96 vCPU, 1152GB RAM, 8×A100 40GB）
- **コスト目安**: 数十ドル/時間規模（オンデマンド、東京リージョン）
- **適したモデル**: Gemma3-27B以上、複数モデル同時実行
- **用途**: 大規模本番環境、分散学習、複数ユーザー同時アクセス
- **特徴**: A100を複数基搭載、圧倒的な並列処理能力

### P5 シリーズ（NVIDIA H100 GPU）

- **例**: p5.48xlarge
- **コスト目安**: P4よりさらに高額
- **適したモデル**: 超大規模モデルの高速学習・推論
- **用途**: 先進的研究開発、大規模本番ワークロード
- **特徴**: H100搭載、最高性能だが非常に高コスト

## セットアップ手順

(g6.xlarge,Ubuntu 22.04 を使用しました)

```bash
# システムを更新, 最新のセキュリティパッチとシステムライブラリ適用
sudo apt update && sudo apt upgrade -y

# NVIDIAドライバとCUDAをインストール
# GPUを使用するために必要なNVIDIAドライバとCUDAツールキットをインストール
# 注: 最新バージョンが525でない場合は 'ubuntu-drivers devices' で確認
sudo apt install -y nvidia-driver-525 nvidia-cuda-toolkit

# ドライバが正しく読み込まれるようにシステムを再起動
sudo reboot

# 再接続後、NVIDIAドライバが正しくインストールされたか確認
# このコマンドでGPU情報と温度が表示されれば正常にインストールされている
# GPUの稼働状況やメモリ使用量も確認できる
nvidia-smi

# Ollamaを直接インストール
# Ollamaの公式インストールスクリプトを実行
# これにより最新バージョンのOllamaがインストール
curl -fsSL https://ollama.com/install.sh | sh

# Ollamaサービスが起動していることを確認
# Active: active (running) と表示されていれば正常
systemctl status ollama

# Gemma3モデルをダウンロード
ollama pull gemma3:12b

# モデルが正しくインストールされたか確認
ollama list

# Ollamaでインタラクティブにモデルを実行
# 対話形式でGemma3モデルを実行します
# Ctrl+D または「exit」と入力して終了できます
ollama run gemma3

# APIとして使用する場合の例
curl -X POST http://localhost:11434/api/generate -d '{
  "model": "gemma3",
  "prompt": "こんにちは、Gemma3！"
}'
````

### セットアップ時間の目安

- システム更新: 5-10分
- NVIDIAドライバインストール: 5-10分
- Ollamaインストール: 1-2分
- Gemma3-1Bダウンロード: 3-5分（ネットワーク速度に依存）
- Gemma3-4Bダウンロード: 5-10分（ネットワーク速度に依存）
- Gemma3-12Bダウンロード: 10-20分（ネットワーク速度に依存）
- Gemma3-27Bダウンロード: 15-30分（ネットワーク速度に依存）

## 外部接続設定

AWS EC2の外部からOllama APIにアクセスできるようにするには、以下の設定が必要です。

### 1. Ollamaサービス設定の変更

```bash
# Ollamaサービスを停止
sudo systemctl stop ollama

# サービス設定ファイルを編集
sudo systemctl edit --full ollama
```

#### 変更前

```
[Unit]
Description=Ollama Service
After=network-online.target

[Service]
ExecStart=/usr/local/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"

[Install]
WantedBy=default.target
```

#### 変更後（外部接続を許可）

```
[Unit]
Description=Ollama Service
After=network-online.target

[Service]
ExecStart=/usr/local/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
Environment="OLLAMA_HOST=0.0.0.0"

[Install]
WantedBy=default.target
```

#### 設定の反映と再起動

```bash
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl restart ollama
sudo systemctl status ollama
```

### 2. EC2セキュリティグループの設定

1. AWSコンソールからEC2インスタンスのセキュリティグループを開く
2. 「インバウンドルール」タブを選択
3. 「インバウンドルールの編集」をクリック
4. 「ルールの追加」をクリック
5. 以下のルールを設定:
    - タイプ: カスタムTCP
    - ポート範囲: 11434
    - ソース: 必要に応じて制限（VPN等特定のIPのみ許可推奨）
    - 説明: Ollama API

**セキュリティ上の注意**: 本番環境では、すべてのIPからのアクセスを許可するのではなく、必要なIPアドレスのみからのアクセスを許可するようにしてください。

## 追加設定（パフォーマンス最適化）

```bash
# Ollamaをシステムサービスとして設定（自動起動用）
sudo systemctl enable ollama

# GPUメモリ使用量の制限設定（例：80%に制限）
echo 'OLLAMA_CUDA_VISIBLE_DEVICES=0 OLLAMA_CUDA_MEM_FRACTION=0.8' | sudo tee -a /etc/environment

# 設定を反映させるためにOllamaサービスを再起動
sudo systemctl restart ollama
nvidia-smi
```

## テスト結果と性能検証

実際にGemma3モデルを試してみたので、メールの内容を判定させてみました。（ちなみに、Gemma3:1BやGemma3:4Bだと結構間違えやすい感じでした）

### テスト1: ビジネスメール判定（業務提携の場合）

```bash
curl -X POST http://localhost:11434/api/generate -d '{
  "model": "gemma3:12b",
  "prompt": "JSONのみ返して、営業のメールならis_sales:true、求職者などはfalse,{\"is_sales\":true or false,\"reason\":\"\"},文章:突然のご連絡失礼いたします。C-limber株式会社の柿添貴士と申します。貴社の事業内容を拝見し、今後の業務提携の可能性についてご相談させていただければと考えております。何卒よろしくお願い申し上げます。"
}'
```

#### 応答結果（例）

```json
{
  "is_sales": true,
  "reason": "事業提携の可能性について相談しているため"
}
```

- 全体処理時間: 約0.95秒
- 出力トークン数: 25    
- プロンプト処理時間: 0.051秒

### テスト2: ビジネスメール判定（求職メールの場合）

```bash
curl -X POST http://localhost:11434/api/generate -d '{
  "model": "gemma3:12b",
  "prompt": "JSONのみ返して、営業のメールならis_sales:true、求職者などはfalse,{\"is_sales\":true or false,\"reason\":\"\"},文章:はじめまして。フリーでIT系エンジニアをやっております、柿添貴士と申します。現在、貴社のディレクター職の求人情報を拝見し、大変興味を持っております。これまでWebアプリケーションの開発や業務系システムの構築に携わる中で、要件定義やプロジェクト進行管理、チーム間の調整など、ディレクション業務にも注力してまいりました。エンジニア経験を活かしながら、より上流工程での価値提供をしていきたいと考えております、貴社のディレクター職に強く魅力を感じております。もし貴社の求める人物像にマッチするようであれば、ぜひ一度お話の機会をいただけますと幸いです。ポートフォリオや職務経歴書もご希望があればお送りいたしますので、ご検討のほど、よろしくお願い申し上げます。"
}'
```

#### 応答結果（例）

```json
{
  "is_sales": false,
  "reason": "求職者が企業への応募メールです。"
}
```

- 全体処理時間: 約1.01秒
- 出力トークン数: 25
- プロンプト処理時間: 0.11秒

## トラブルシューティング

### 1. GPU関連の問題

- **nvidia-smiが見つからない場合**
    
    ```bash
    sudo apt update
    sudo apt install -y nvidia-utils-525
    ```
    
- **CUDAエラー（out of memory）**
    
    ```bash
    ollama pull gemma3:8b       # より小さいモデル
    ollama pull gemma3:12b-q4_0 # 4ビット量子化モデル
    ```
    

### 2. Ollama関連の問題

- **ダウンロード中にタイムアウト**
    
    ```bash
    ollama pull gemma3
    ollama list
    ```
    
- **APIアクセスエラー（Connection refused）**
    
    - Ollamaが実行中か `systemctl status ollama` で確認
        
    - ホスト設定を `Environment="OLLAMA_HOST=0.0.0.0"` に変更しているか
        
    - EC2のセキュリティグループでポート11434を開放しているか
        

### 3. パフォーマンス最適化

- **応答が遅い場合**
    
    ```bash
    curl -X POST http://localhost:11434/api/generate -d '{
      "model": "gemma3",
      "prompt": "こんにちは",
      "options": {
        "num_ctx": 2048
      }
    }'
    nvidia-smi -l 1
    ```
    

## まとめ

AWS EC2のG系インスタンス上にOllama & Gemma3をセットアップしてみたら、自社専用のAI推論エンジンが思いのほかサクッと構築できました。日本語処理も十分に実用的なレベルで、特にビジネス文書の分類や要約なんかに強そうです。

- **API課金なしで自社運用**    
- **データプライバシーが守れる**
- **カスタマイズ自由度が高い**
- **スケーラブルなインフラにも対応**

今回はテキスト処理をメインに試しましたが、Gemma 3にはマルチモーダル機能もあるので、画像や動画の解析なんかもそのうち検証してみたいですね。図表の情報を抽出して技術文書やプレゼン資料をまとめるとか、社内のビジュアルコンテンツと絡めるとさらに可能性が広がりそうです。

### 今後の展開

- **社内ナレッジベースとの連携**  
    LangChainやLlamaIndexでRAG（Retrieval Augmented Generation）を実現。社内文書やFAQを検索＆生成AIで活用。
    
- **部署別カスタムモデルの構築**  
    営業、開発、人事などで専門性を高める。LoRAやPTQ（Post-Training Quantization）で手軽にチューニング可能。
    
- **社内チャットボットへの統合**  
    SlackやTeamsと連携して、普段使ってるコミュニケーションツールでAIに質問できるように。
    
- **プライバシー保護の強化**  
    個人情報を自動で検出＆マスキングしてくれる仕組みがあればさらに安心。
    
- **ガバナンス・監査体制の整備**  
    生成内容とプロンプトをログに残しておくことで、リスク管理もちゃんとできる。
    
- **ハイブリッドアプローチ**  
    一般的な質問は外部クラウドAI、社内情報を要する質問はGemma3、と切り替えるルーティングもアリ。

## 参考リンク

- [Introducing Gemma 3: The most capable model you can run on a single GPU or TPU](https://blog.google/technology/developers/gemma-3/#:~:text=,tasks%20and%20build%20agentic%20experiences)  
    　└ Google公式のGemma 3発表ブログ（英語）
    
- [Gemma3モデルの詳細情報](https://ai.google.dev/gemma)  
    　└ Google AIのGemma 3公式ドキュメント
    
- [Gemma 3: Open Multimodal AI with Increased Context Window](https://medium.com/@mysocial81/gemma-3-open-multimodal-ai-with-increased-context-window-4a3b3cdf3f25#:~:text=,with%20external%20APIs%20and%20tools)  
    　└ Gemma 3の特徴を解説したMedium記事（構造化出力・マルチモーダル対応など）
    
- [Gemma 3のファインチューニング手順​](https://keras.io/examples/keras_recipes/parameter_efficient_finetuning_of_gemma_with_lora_and_qlora/#:~:text=Parameter,task%20using%20LoRA%20and%20QLoRA)  
    　└ KerasによるGemma 3のLoRA/QLoRA微調整チュートリアル
    
- [UnslothによるGemma 3のLoRAチューニング報告​](https://www.reddit.com/r/LocalLLaMA/comments/1jba8c1/gemma_3_finetuning_now_in_unsloth_16x_faster_with/#:~:text=Gemma%203%20Fine,27B%20also%20fits%20in%2024GB)  
    　└ RedditでのGemma 3（27B含む）の高速LoRAチューニング報告
    
- [ollama.com](https://ollama.com/library/gemma3#:~:text=Gemma%20is%20a%20lightweight%2C%20family,limited%20devices)  
    　└ Ollamaの公式モデルライブラリ内、Gemma 3の紹介ページ
    
- [Ollamaドキュメント](https://github.com/ollama/ollama/blob/main/docs/api.md)  
    　└ OllamaのAPI仕様ドキュメント（公式GitHub）
    
- [Ollama公式Docs: Linuxインストール方法​](https://github.com/ollama/ollama/blob/main/docs/linux.md#:~:text=To%20install%20Ollama%2C%20run%20the,following%20command)  
    　└ Linux環境でのOllamaインストール手順
    
- [Ollama API Docs: API使用例](https://medium.com/@abonia/ollama-and-langchain-run-llms-locally-900931914a46#:~:text=curl%20http%3A%2F%2Flocalhost%3A11434%2Fapi%2Fgenerate%20,)  
    　└ APIでOllamaを操作する具体例（curl実行など）
    
- [Aidentブログ: Ollamaをネットワーク公開する方法（OLLAMA_HOST設定）​](https://aident.ai/blog/how-to-expose-ollama-service-api-to-network#:~:text=If%20Ollama%20is%20run%20as,systemctl)  
    　└ Ollamaをネットワーク経由で使うための設定方法
    
- [thoughtbotブログ: OllamaをVM上で動かしリモートアクセスする解説​](https://thoughtbot.com/blog/how-to-use-open-source-LLM-model-locally#:~:text=up%20and%20run%20an%20open,machine%20and%20access%20it%20remotely)  
    　└ 仮想マシンでOllamaをセットアップし、外部からアクセスする方法
    
- [LangChain公式Docs: Ollama統合](https://python.langchain.com/docs/integrations/llms/ollama/#:~:text=Setup%E2%80%8B,the%20available%20supported%20platforms)  
    　└ LangChainとOllamaの連携方法（RAG用途）
    
- [AWS GPUインスタンスドキュメント](https://aws.amazon.com/jp/ec2/instance-types/#Accelerated_Computing)  
    　└ AWSのGPUインスタンス一覧とスペック解説
    
- [docs.aws.amazon.com](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/install-nvidia-driver.html#:~:text=G3%20Tesla%20M,Series%20V100)  
    　└ AWSでのNVIDIAドライバインストール手順（インスタンスごとの注意点あり）
    
- [CloudOptimo](https://costcalc.cloudoptimo.com/aws-pricing-calculator/ec2/g5.xlarge#:~:text=Tokyo%241)  
    　└ G5.xlargeインスタンスの東京リージョン価格シミュレーター
    
- [aws-pricing.com](https://aws-pricing.com/g6.xlarge.html#:~:text=eu,94)  
    　└ G6.xlargeインスタンスの料金確認ページ（非公式・地域別）
    
- [vLLM vs OLLama and Competitors: A Comprehensive Guide to LLM Inference Solutions](https://medium.com/@AceTheCloud-Abhishek/vllm-vs-ollama-and-competitors-a-comprehensive-guide-to-llm-inference-solutions-98713356f8ce#:~:text=,Transformers%2C%20ideal%20for%20cloud%20serving)  
    　└ vLLM・Ollamaなど主要LLMツールの比較ガイド
    
- [Is LLM Studio good?](https://www.reddit.com/r/LocalLLaMA/comments/1g6dw9q/is_llm_studio_good/#:~:text=Depends%20on%20what%20you%20want,server%20option%20in%20LM%20studio)  
    　└ LM Studioの評判・使い勝手に関するディスカッション
    
- [Gemma 3 + Ollama + ChainlitによるローカルChatGPT構築​](https://www.linkedin.com/posts/akshay-pachaar_100-local-multimodal-chat-app-using-gemma-activity-7305899180848201728-gSGC#:~:text=you%20would%20chat%20with%20ChatGPT,530%2B%20pages)  
    　└ Chainlitと組み合わせたローカルGemma 3チャットアプリ構築例
    
- [Hacker Newsコメント: Gemma 3 27Bのトークン毎秒速度​](https://www.deeplearning.ai/the-batch/issue-294/#:~:text=issue%20294%20,68%20seconds%20to%20first%20token)  
    　└ Gemma 3の生成速度に関するユーザーレポート（27Bモデル）
    
- [GitHub Issue議論: LLM生成速度比較（LLaMA3.1 8B vs Gemma3 4B）​](https://github.com/ollama/ollama/issues/9701#:~:text=,4B%20only%20reaches%20160)  
    　└ Gemma 3とLLaMAの速度比較（Ollama環境下）