本日5件のお問い合わせがありました。

✉️FIELDにお問い合わせ

Uncategorized

ec2を用いたローカルAIの作り方(gguf LoRA RAG)

GGUFモデルが切り拓く「企業のためのAI内製化」とでも言えるタイトルでご紹介します。

生成AIが急速に普及する中で、
企業が抱える大きな悩みのひとつが 「機密データを外部サービスに渡せない問題」「無限にAI費用かかる笑」 です。

ChatGPTやClaudeといったクラウド型LLMは非常に優れていますが、
利用量に応じた従量課金や、データの取り扱いを気にする業種(医療・自治体・金融・大規模ECなど)では導入のハードルが依然として存在します。

こうした課題を背景に、近年急速に注目を集めているのが “ローカルAI” です。


■ ローカルAIとは?

ローカルAIとは、AIモデルをクラウドではなく 自社サーバーやPCに直接インストールして動かす方式 の総称です。

特に最近注目されているのが GGUF という形式のAIモデル。
これは、GPTシリーズのような大規模言語モデルを軽量化し、
個人PC・社内PC・オンプレサーバーでも動かせるよう最適化されたフォーマット です。

  • インターネット接続なしで動作
  • GPUがなくても動作可能
  • 企業ごとに「学習させる」ことが可能
  • 月額利用料がほぼゼロ
  • データが外部に漏れない

という点から、世界的に導入が進んでいます。


■ 企業が“ローカルAI”を必要とする理由

1. 機密情報を外部に出さないセキュリティ

医療機関・自治体・病院・金融・製造・研究所など、
「機密データを第三者のAIに送れない」という業界は多く存在します。

ローカルAIなら
データが一切外部に出ない
ため、最も厳しい情報管理ポリシーにも適合します。


2. 自社ドメイン知識を“独自学習”できる

GGUFモデルは、いわば
「GPTの型落ち版を丸ごとPCに入れて自由に育てる」
ようなものです。

  • 給与計算の社内ルール
  • 医療機関の運用マニュアル
  • 自治体の条例・手続き
  • ECの独自オペレーション
  • 社員教育マニュアル

といった社内資料を自由に読み込ませて

「その会社専用のAIアシスタント」

としてカスタマイズ可能です。

クラウド型GPTには真似できない、
“企業内AIの内製化” がここで実現します。


3. 利用料金は“ほぼゼロ円”でスケール可能

ChatGPTをはじめとするクラウドAIは、
利用量に応じて毎月のコストが増加します。

一方ローカルAIは、

  • モデル:無料(オープンソース)
  • 実行環境:社内サーバー or PC
  • 月額利用料:ほぼゼロ

となり、
社員100人が毎日使ってもコストは変わりません。


■ どのように導入されているのか?(実際のユースケース)

● 医療機関:院内マニュアル × ローカルAI

医療安全マニュアルや看護手順を学習させ、
「看護師向けAIマニュアル」として活用。

外部にデータを出せないためローカルAIが適合。


● 自治体:条例・受付手続き × ローカルAI

役所の問い合わせ業務の削減、職員の知識補完として最適。

住民情報を扱うためクラウドAIは使用不可。


● 企業:給与計算・内部ルール × ローカルAI

給与計算の例外処理は会社ごとに異なり複雑。

  • 共通の「給与計算の一般理論」(common)
  • 会社固有の運用ルール(companyIDごとのテキスト)

を読み込ませれば、

「その会社専用の給与計算AI」

として運用できます。


■ ローカルAI導入プロセス(FIELDが実際に行う工程)

合同会社FIELDでは、ローカルAI導入プロジェクトにおいて
以下のような流れで構築を行います。

STEP1:GGUFモデルの選定・ダウンロード

Meta・Mistral・Llama系など、用途に応じて最適モデルを選択。
EC2 やオンプレにダウンロードします。

STEP2:企業の共通知識(Common)をLoRAで追加学習

給与計算・医療手順・EC運用など、
「業界共通の知識」を追加学習して強化します。

STEP3:企業ごとの固有データを埋め込み(RAG or 軽微LoRA)

company/1/salary.txt
company/2/salary.txt

のように企業ID別に固有知識を管理。

STEP4:チャットUIを構築(社内専用)

社員がブラウザからログインして

  • 過去の会話
  • common知識
  • 会社IDの知識

を毎回読み込んで回答する仕組み。

STEP5:セキュリティ設計

ネット遮断、VPN接続、アクセスログ管理など
自治体や医療機関でも通る設計にします。


■ ローカルAIは“第二のDX”になる

クラウドAIが人間の知的作業を加速させたのに対し、
ローカルAIは 企業の知識そのものをAI化 します。

  • ノウハウの継承
  • 属人化の解消
  • 問い合わせ削減
  • 研修コストの低減
  • 業務のスピードアップ

といったDXの根本課題を一気に解決できる技術です。

特に、

  • 医療
  • 自治体
  • 社会福祉
  • 大規模EC
  • 製造・研究
  • 機密情報を扱う企業

では、ローカルAI導入は2025年以降の大きな潮流 になると確信しています。

そこで、会計事務所を想定して、給与計算の時の全社共通の運用やマニュアルを押さえた上で、個社毎の備忘を意識しながらコミュニケーションを返すAIを作ってみましょうか。

【全体構成図】給与計算AIシステム(LoRA+RAG ハイブリッド)

                   [GPU EC2] (学習用)
        ┌──────────────────────────────────┐
        │ ① Llama3 FP16モデルDL(HuggingFace)                │
        │ ② common_saraly(法律・実務)をLoRA学習              │
        │ ③ 微調整後モデルをFP16で保存                         │
        │ ④ llama.cppでGGUF形式に変換                          │
        └───────────────┬──────────────────┘
                          │ gguf ダウンロード(scp)
                          ▼
                [CPU EC2](本番運用)
        ┌──────────────────────────────────┐
        │ ⑤ 強化済みGGUFモデルを /models/ に配置               │
        │ ⑥ FastAPI:RAG処理+チャットUI                      │
        │ ⑦ /company/common(学習済)                         │
        │ ⑧ /company/ids/{id}/saraly.txt                      │
        │ ⑨ 会社ID別の“会社固有ルール”をRAG                   │
        └──────────────────────────────────┘
                          │
                          ▼
                http://<EC2_IP>/?company_id=1
                http://<EC2_IP>/?company_id=2
              → 会社別の給与計算AIとして回答

この記事の目的

以下が構築できるようになっていると思われます。

  • 給与計算の“共通ルール”を LoRA でモデルに焼く
  • 会社固有ルールは RAG で補完
  • ChatGPT風の Web UI で会話
  • マルチテナント(複数企業)対応
  • EC2 上で安全に運用できるローカルAI

STEP 0:前提

用途インスタンス理由
学習用g5.xlargeA10G GPU / 給与計算のLoRA学習なら十分
運用用t3.xlargeCPUだけでGGUFが高速に動く

OS は Ubuntu 22.04 LTS を選択。


STEP 1:学習用 EC2(GPU)を準備する

1-1. SSH で接続

ssh -i key.pem ubuntu@<GPU-EC2-IP>

1-2. 必須ライブラリをインストール

sudo apt update
sudo apt install -y git python3 python3-venv python3-dev

STEP 2:モデルをダウンロードする(FP16)

LoRA学習は GGUF ではできないため FP16モデル を使用。

例:Meta-Llama-3-8B-Instruct(高品質+LoRA対応)

mkdir -p ~/sft/models
huggingface-cli download meta-llama/Meta-Llama-3-8B-Instruct \
  --local-dir ~/sft/models/llama3-8b \
  --local-dir-use-symlinks False

STEP 3:学習データを準備する

common_saraly.txt(給与計算の法律や実務ルール)を使って SFT形式(JSONL) を作る。

3-1. ファイルをアップロード

scp -i key.pem common_saraly.txt ubuntu@<GPU-EC2-IP>:~/sft/

3-2. JSONL生成スクリプト

cat > ~/sft/prepare_dataset.py << 'EOF'
import json
text = open("common_saraly.txt","r",encoding="utf-8").read()

records = []
for line in text.split("\n"):
    line=line.strip()
    if len(line)<5: continue
    prompt=f"給与計算ルール『{line}』を専門家として詳しく説明してください。"
    answer=f"『{line}』は給与計算において次の点が重要です:\n{line}"
    records.append({"instruction":prompt,"output":answer})

with open("train.jsonl","w",encoding="utf-8") as f:
    for r in records: f.write(json.dumps(r,ensure_ascii=False)+"\n")
EOF

実行:

python3 ~/sft/prepare_dataset.py

STEP 4:LoRA(追加学習)を実行する

4-1. LlamaFactory を準備

pip install llamafactory
pip install transformers datasets peft accelerate bitsandbytes sentencepiece

4-2. 学習設定ファイル

cat > ~/sft/train/train.yaml << 'EOF'
model_name_or_path: /home/ubuntu/sft/models/llama3-8b
output_dir: /home/ubuntu/sft/output
dataset: custom
custom_dataset_file: /home/ubuntu/sft/train.jsonl

finetuning_type: lora
lora_target: "all"
lora_rank: 8
lora_alpha: 16

num_train_epochs: 3
per_device_train_batch_size: 1
learning_rate: 3e-5
cutoff_len: 2048
bf16: true
EOF

4-3. 実行

llamafactory-cli train ~/sft/train/train.yaml

完了後:

~/sft/output/
  adapter_config.json
  adapter_model.bin

STEP 5:LoRA をベースモデルへマージ(FP16モデル化)

llamafactory-cli merge_lora \
  --model_name_or_path ~/sft/models/llama3-8b \
  --lora_model_path ~/sft/output \
  --output_dir ~/sft/merged-model

生成物:

~/sft/merged-model/
  model.safetensors
  config.json
  tokenizer.model

STEP 6:FP16モデル → GGUF変換

GGUFは llama.cpp が必要。

6-1. llama.cpp をセットアップ

cd ~
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make

6-2. 変換

mkdir -p ~/sft/gguf
python3 convert.py \
  --outfile ~/sft/gguf/salary-llama3.gguf \
  --outtype q4_0 \
  ~/sft/merged-model

STEP 7:本番 EC2(CPU)の準備

別EC2(t3.xlarge)に接続:

ssh -i key.pem ubuntu@<CPU-EC2-IP>

STEP 8:本番サーバの構成(ディレクトリ作成)

sudo mkdir -p /opt/local-llm-app
sudo chown ubuntu:ubuntu /opt/local-llm-app
cd /opt/local-llm-app

mkdir -p models
mkdir -p company/common
mkdir -p company/ids/1
mkdir -p company/ids/2
mkdir -p company/history
mkdir -p app/templates

STEP 9:強化モデル(GGUF)をアップロード

GPU EC2 → CPU EC2 に転送:

scp -i key.pem ubuntu@<GPU-EC2-IP>:~/sft/gguf/salary-llama3.gguf \
    ubuntu@<CPU-EC2-IP>:/opt/local-llm-app/models/

STEP 10:FastAPI(RAG + チャットUI)を導入

以下で 完全に動くチャットアプリ が構築されます。

10-1. ライブラリセットアップ

cd /opt/local-llm-app
python3 -m venv venv
source venv/bin/activate

pip install fastapi "uvicorn[standard]" llama-cpp-python jinja2 python-multipart

STEP 11:main.py(RAG + 履歴 + 会社ID対応)配置

(前メッセージで生成した完全コードをそのまま使用)

※ MODEL_PATH だけ以下に変更:

MODEL_PATH = "/opt/local-llm-app/models/salary-llama3.gguf"

STEP 12:チャットUI(index.html)を配置

(前メッセージの index.html をそのまま設置)


STEP 13:uvicorn の systemd サービス化

sudo tee /etc/systemd/system/local-llm.service > /dev/null << 'EOF'
[Unit]
Description=Local LLM FastAPI
After=network.target

[Service]
User=ubuntu
Group=ubuntu
WorkingDirectory=/opt/local-llm-app
Environment="PATH=/opt/local-llm-app/venv/bin"
ExecStart=/opt/local-llm-app/venv/bin/uvicorn app.main:app --host 127.0.0.1 --port 8000
Restart=always

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable local-llm
sudo systemctl start local-llm

STEP 14:nginxで 80番公開

sudo tee /etc/nginx/sites-available/default > /dev/null << 'EOF'
server {
    listen 80;
    server_name _;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
EOF

sudo nginx -t
sudo systemctl restart nginx

STEP 15:運用 URL から確認する

ブラウザで:

http://<EC2_IP>/?company_id=1

or

http://salary-ai.example.com/?company_id=2

→ ChatGPT風のUIが開き、
給与計算の共通知識(LoRAで焼き済み)+会社固有ルール(RAG)が反映された回答が返ってくる。

これで完成です!

  • common を LoRA で焼く(モデル強化)
  • 会社固有ルールは RAG
  • マルチテナントの給与計算AI
  • EC2 で安全に運用
  • ChatGPT風 UI

これをベースにすればいろいろと展開できる人はやりやすいのではないかとおもいました。

Yamamoto Yuya

プロフェッショナルとしての高いスキルと知識を持ち、誠実さと責任感を大切にする。常に向上心を持ち、新たな挑戦にも積極的に取り組む努力家。