VPS(ConoHa)にZRAM導入してメモリー不足解消

ZRAMを正しく設定すれば、4GBメモリのVPSを体感6GB〜10GB相当まで引き上げられます。(ChatGPT曰く)


本記事では、Ubuntu/Debian系でZRAMを導入し、実質2.5倍を狙う具体手順をハンズオン形式で解説します。


ZRAMとは?(超かんたん解説)

ZRAMはメモリ上に圧縮スワップを作る仕組み
→ 同じ4GBでも「圧縮」することでより多くのデータを詰め込める

  • 速い:ディスクスワップより圧倒的に高速

  • 安い:設定するだけ

  • 現実的:1.5〜2.5倍が狙える(ワークロード次第)

    実質2.5倍を狙う設計(考え方)

    前提

    • 物理メモリ:4GB

    • ZRAMサイズ:4GB(= 物理メモリと同サイズ)

    • 圧縮率目標:2.5倍
      → 理論上:4GB + (4GB × 2.5) ≒ 10GB相当

    ※ 実データの圧縮率に依存。テキスト/キャッシュ多めなら達成しやすい。

    ハンズオン:ZRAMを導入する(Ubuntu / Debian)

    ① 既存スワップの確認(念のため)

    swapon --show free -h

    ※ 既存のディスクスワップがあってもOK。ZRAMを優先させる。


    ② ZRAMツールをインストール

    sudo apt update sudo apt install -y zram-tools

    ③ 設定ファイルを編集(2.5倍を狙う構成)

    sudo nano /etc/default/zramswap

    以下に設定:

    ALGO=zstd PERCENT=100 PRIORITY=100

    意味(超重要)

    • ALGO=zstd
      → 圧縮率と速度のバランスが良い(2.0〜2.8倍狙える)

    • PERCENT=100
      → 物理メモリと同サイズのZRAM(4GBなら4GB)

    • PRIORITY=100
      → ディスクスワップよりZRAMを優先

      実際にやってみた(メモリー2GB)

      項目意味今の状態
      ALGORITHM圧縮方式zstd(OK)
      DISKSIZEZRAMのサイズ3.8GB(ほぼ4GB)
      DATA実データ量4KB(ほぼゼロ)
      COMPR圧縮後サイズ59B(誤差レベル)
      TOTAL管理用含む20KB
      MOUNTPOINT用途swap


    ZRAMがちゃんと効くかテストする(安全な負荷テスト)

    「本当に圧縮できるか」試すなら👇

    sudo apt install -y stress-ng stress-ng --vm 2 --vm-bytes 2G --timeout 30s

    zramctl free -h NAME ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT /dev/zram0 zstd 3.8G 42.5M 9.6M 12.9M 3 [SWAP] total used free shared buff/cache available Mem: 1.9Gi 361Mi 1.6Gi 36Ki 102Mi 1.6Gi Swap: 5.8Gi 42Mi 5.8Gi

    /dev/zram0 zstd 3.8G 42.5M 9.6M 12.9M 3 [SWAP]
    項目 意味 今の数値 評価
    DISKSIZE ZRAMサイズ 3.8GB OK
    DATA 実データ 42.5MB スワップに乗り始めてる
    COMPR 圧縮後 9.6MB かなり圧縮できてる
    圧縮率 DATA / COMPR 約 4.4倍 めちゃ優秀
    👉 このワークロードはZRAMと相性良い
    (テキスト/キャッシュ系っぽい)
    Mem:  1.9Gi total / 361Mi used / 1.6Gi free
    Swap: 5.8Gi total / 42Mi used
    物理RAM:1.9GB(※ 4GBじゃなく2GBプランっぽいね)

    ZRAM + 既存swap 合計:5.8GB

    すでに 42MB 分がZRAMに逃げてる

    👉 OOM回避のバッファとしてはかなり優秀な状態

    「実質10GB」になってるか?現実ライン

    今の圧縮率が維持できた場合の理論値:

    • ZRAM 3.8GB × 4.4倍 ≒ 16GB相当(理論上)

    • ただし、これは軽いデータが多いから出てる数値


      ここからはメモリー増やした状態でこのVPSをLLMサーバーにしてみたいと思います。


      対象:

      • Ubuntu Server

      • 物理RAM:2GB

      • ZRAM:有効

      • 目的:とりあえずLLMが動くこと

      使うモデル:

      Phi-3 mini 1.5B(Q4量子化 / GGUF)
      → 超軽量・実用レベル・2GB環境の現実解


      ① 依存関係インストール

      sudo apt update sudo apt install -y build-essential cmake git



      ② llama.cpp をビルド(CPU版)

      git clone https://github.com/ggerganov/llama.cpp cd llama.cpp cmake -B build cmake --build build -j$(nproc)

      ※ AVX2対応CPUなら自動で最適化される
      ※ 非対応でも動く(遅いだけ)


      ③ 軽量モデルをダウンロード

      mkdir -p models cd models wget -O tinyllama-chat.Q4_K_M.gguf \ https://huggingface.co/TheBloke/TinyLlama-1.1B-Chat-v1.0-GGUF/resolve/main/tinyllama-1.1b-chat-v1.0.Q4_K_M.gguf cd ..

      ※ サイズ:約1GB
      ※ 2GB + ZRAM環境の現実ライン


      ④ サーバーモードで起動(GUI不要)

      cd ~/llama.cpp ./build/bin/llama-cli \ -m models/tinyllama-chat.Q4_K_M.gguf \ --ctx-size 1024 \ -t 2 \ -n 64 \ -p "日本語で自己紹介して。"

      ./build/bin/llama-server \ -m models/tinyllama-chat.Q4_K_M.gguf \ --ctx-size 1024 \ -t 2 \ --host 0.0.0.0 \ --port 8080



      パラメータ解説(重要)

      オプション意味理由
      -c 1024コンテキストメモリ節約
      -t 2スレッドCPU 3コア想定
      --host 0.0.0.0外部公開APIで使う
      --port 8080ポートお好み

      ⑤ 動作確認(VPS内)

      curl http://127.0.0.1:8080/health

      ok が返れば成功 🎉

    ⑥ 推論テスト(API叩く)

    curl http://127.0.0.1:8080/completion \ -H "Content-Type: application/json" \ -d '{ "prompt": "日本語で自己紹介してください。", "n_predict": 64 }'

    👉 数秒〜十数秒後に日本語で返ってくれば成功


    上記のモデルはめちゃくちゃ日本語が弱い。


    ELYZA-tasks-1.1B GGUF(日本語特化・軽量)

    cd ~/llama.cpp/models wget -O elyza-tasks-1.1b.Q4_K_M.gguf \ https://huggingface.co/mmnga/ELYZA-tasks-1.1B-GGUF/resolve/main/ELYZA-tasks-1.1B.Q4_K_M.gguf

    起動:

    cd ~/llama.cpp ./build/bin/llama-cli \ -m models/elyza-tasks-1.1b.Q4_K_M.gguf \ --ctx-size 1024 \ -t 2 \ -n 128 \ -p "日本語で自己紹介して。"

    👉 これで ちゃんと日本語が返るはず


    今の環境は “Hugging Faceの直wgetが全部401で弾かれる” 設定 になってる。
    (IPv6経由 or 事業者IP帯が弾かれてるパターンが多い)



      hf download bartowski/Meta-Llama-3.1-8B-Instruct-GGUF   Meta-Llama-3.1-8B-Instruct-IQ2_M.gguf   --local-dir .

      No local file found. Retrying..

      Meta-Llama-3.1-8B-Instruct-IQ2_M.gguf:   4%|█▋                                       | 122M/2.95G [02:00<58:45, 802kB/s]Killed

      よく使うモデルを入れてみよと思ったけど・・・メモリー不足でダメ・・・LLMは難しい・・・

      コメント (0)

      まだコメントはありません。最初のコメントを投稿してください!

      コメントを投稿