問題提起
-
軽量な社内利用・検証用途では SaaS LLM の従量課金が過剰になる
-
ローカルLLMをAPI化して、コスト上限を物理リソースで制御したい
-
個人・小規模チームでも再現可能な構成を優先する必要がある
-
解決方針は「LM StudioをDocker上でAPI化して、課金を抑える設計を採用すること」
背景と現状
-
ベースOSは ubuntu:24.04 を採用。LM Studio公式インストーラ前提のglibc環境を活用
-
GUIは使わず、Electron系依存(GTK / X11)を明示的にインストールして依存解決を回避
-
LM Studioは install.sh 経由で導入。公式手順を踏み、将来のアップデート追従を容易に
-
APIポートは 1234 を公開。OpenAI互換APIとしてアプリ側の差し替えを容易に
-
モデルは google/gemma-3-4b をデフォルト指定。過度な高性能より「使いすぎない制御」を重視
-
環境設計はCPU/GPU・メモリ・同時実行数で自然に利用制限がかかるようにする
検討と意思決定
-
課金を避けたい用途にはローカルLLMを選択。コストは物理リソースで管理する
-
API公開を前提とした設計で、後の運用でAPIゲートウェイ等の制限を付けやすくする
-
起動・運用の柔軟性を高めるため、起動処理を Dockerfile から分離する entrypoint を採用
-
今後の検討領域
-
GPU活用(--gpus all)の有無
-
モデルキャッシュの volume化
-
リクエスト数・並列数の制限設計
-
-
次のアクションとして、環境変数でモデル切替を可能にする、context length/threadsの調整、軽量モデルの比較検証を検討
解決策と成果
-
解決策の核
-
ubuntu:24.04 ベースで、公式インストール手順に沿って LM Studio を導入
-
GUIは不要、依存は最小化して必要なライブラリだけをインストール
-
LM Studioを API ポート 1234 で公開して、OpenAI互換APIとして扱える設計
-
デフォルトモデルは google/gemma-3-4b、コストを抑えつつ現実的な性能を確保
-
エントリポイントを分離して起動オプションの変更をDockerfileから切り離し、将来のアップデート追従を容易に
-
-
実装イメージ(核心点)
-
ベース: ubuntu:24.04
-
GUI依存を明示的にインストールしつつGUIは使わない設計
-
install.sh 経由で LM Studio 導入
-
PATHとLMSTUDIO_DEFAULT_MODELの設定
-
EXPOSE 1234、entrypoint.sh を用いた起動
-
-
実際のコード構成は以下のDockerfileが最小構成として機能する
[.notes]
このDockerfileは LM StudioをDocker上で動かし、ローカルLLMをAPIとして提供するための最小構成。
FROM ubuntu:24.04
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
apt-get install -y --no-install-recommends \
bash \
ca-certificates \
curl \
libasound2t64 \
libatomic1 \
libatk-bridge2.0-0 \
libatk1.0-0 \
libc6 \
libcairo2 \
libcups2 \
libdbus-1-3 \
libdrm2 \
libgbm1 \
libglib2.0-0 \
libgtk-3-0 \
libnspr4 \
libnss3 \
libpango-1.0-0 \
libx11-6 \
libx11-xcb1 \
libxcb-dri3-0 \
libxcomposite1 \
libxdamage1 \
libxext6 \
libxfixes3 \
libxkbcommon0 \
libxrandr2 \
libgomp1 \
libxshmfence1 \
xdg-utils && \
rm -rf /var/lib/apt/lists/*
RUN curl -fsSL https://lmstudio.ai/install.sh | bash
ENV PATH=/root/.lmstudio/bin:$PATH
ENV LMSTUDIO_DEFAULT_MODEL=google/gemma-3-4b
EXPOSE 1234
COPY docker/lmstudio/entrypoint.sh /usr/local/bin/lmstudio-entrypoint.sh
RUN chmod +x /usr/local/bin/lmstudio-entrypoint.sh
CMD ["/usr/local/bin/lmstudio-entrypoint.sh"]
このDockerfileは LM StudioをDocker上で動かし、ローカルLLMをAPIとして提供するための最小構成。
構成の観点
-
ベースは
ubuntu:24.04
→ LM Studio公式インストーラが前提としているglibc環境に合わせるため -
GUI不要だが、Electron系依存ライブラリ(GTK, X11系)を明示的にインストール
→lmstudioバイナリ起動時の依存解決用 -
install.shを使って公式手順どおりにLM Studioを導入
→ 将来のアップデート追従を優先
判断基準
-
課金を避けたい用途(軽量な社内AI、検証用API)なのでローカルLLMを採用
-
モデルは
google/gemma-3-4bをデフォルト指定
→ メモリ消費と性能のバランス重視 -
APIポートは
1234を公開
→ LM Studioの標準API互換
運用上のポイント
-
実際の起動処理は
entrypoint.shに切り出し
→ モデル切替やオプション変更をDockerfileに書かずに済む -
本番用途では
-
GPU対応(
--gpus all) -
モデルキャッシュのvolume化
-
利用制限(リクエスト数・並列数) を検討余地あり
-
次に試すこと
-
LMSTUDIO_DEFAULT_MODELを環境変数で切替可能にする -
--context-lengthや--threadsの明示指定 -
軽量モデル(Phi / Qwen)との比較検証
関連スライド
1Passwordと Kubernetes Secretsで実現する方法
2026/04/22
スライド作成の型まとめ
2026/04/11
Vibe Coding×LLM時代の個人開発攻略:前提設計でAIのミスを減らす実践テク
2026/04/09
GitHub Actions+Release Notes活用デプロイフロー
2026/04/08
OpenClawに挑む: 私の使ってみたい気持ちとセキュリティの不安
2026/04/04
cloudflare入れてみた
2026/04/02
Tauriで子供向けアプリを作ってみた話
2026/04/02
43歳、常用偏光レンズで気づいたこと
2026/02/15
デザインを外注してよかった話
2026/02/15
子供向けアプリをTauriで作ってみた話
2026/02/15
ピラティスを始めて感じたこと
2026/02/15
AIにコードを書かせている僕の話
2026/02/15
GitHub READMEをそのままスライドへ
2026/02/14
AI導入で個人開発はどう変わったか
2026/02/08
過程を楽しむ人間は、どう稼げるのか
2026/02/08
slidictの概要
2026/02/08