0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MacをローカルLLM APIサーバーに

0
Last updated at Posted at 2025-10-23

はじめに

この度、大学の研究室に共用計算機としてMac Studioが導入されたということで、これを使って研究室メンバーがAPIを叩いてLLMを利用できるようにしていきたいと思います。

利用するツール

  • Mac Studio (2025, M3Ultra, 512GB Unified Memory)
  • remoteSSH
  • Ollama

  • LiteLLM

システム構造

今回の目的は、OpenAIのAPI互換のPythonコードでもってMac Studio上のローカルモデルを呼び出し、推論ができるようにすることです。

システムの全体構造
<個人PC> --> <LiteLLM> --> <Ollamaサーバー>

remoteSSH

私の研究室では共用の計算資源へアクセスする方法としてremoteSSHが採用されています。今回もその慣例に倣い、ローカルネットワーク下であるなしかかわらず、VSCodeから安全にアクセスできるようにしました。

Ollama

オープンソースモデルをローカル環境で動かすツールは数多く存在しますが、中でも今回は個人PCからCLIで動かすということで、調べた中で最も使いやすいと感じたOllamaを利用します。
※今回は以下のサイトを参照しました。

LiteLLM

今回Ollamaの前にプロキシサーバーを立てるのに利用したのが、LiteLLMです。
導入の主たる目的は、既定のモデル以外を大量にロードすることによるリソースの圧迫を避けることです。LiteLLMの設定の中で指定したモデル以外のリクエストを拒否することにより、それを実現しています。
また、同じPythonコードでClosedモデルにAPI経由でアクセスするのに便利という嬉しい副作用もあります。

実装手順

Ollama

  • Ollamaのインストール

  • 利用するモデルのロード
    OllamaではOllama側が公式で提供しているモデルの他に、Hugging Face上で公開されているモデルを利用することもできます。
    後者の場合は.gguf形式で公開されているものを選ぶか、自分で.gguf形式に変換するかが必要となります。

# Ollamaの公式ライブラリからロードする場合はそのまま指定(コロン以降でモデルサイズ指定)
ollama pull gemma3:4b

# 公式ライブラリにない.gguf形式モデルをロードする場合 (hf.co以下はモデルに準ずる)
ollama pull hf.co/unsloth/granite-4.0-micro-GGUF
  • Ollamaサーバー用のscreenセッションに入る
    APIサーバー化するので管理者アカウントでログインしていないときに動かないということでは問題があります。
    そこで今回はscreenセッションを利用して、そのアカウントにログインしていなくともOllamaが動き続けるようにしていきたいと思います。
screen -S ollama_server
  • screenセッション内でサーバーを起動
    作成したscreenセッションの中でOllamaを起動します。
ollama serve
# Ctrl + A -> Dでデタッチしてscreenセッションから抜けられる

コマンドを実行すると処理待ちになり動かなくなるが正常

コマンド 内容
ollama serve Ollamaを起動
ollama create <モデル名> -f Modelfile Modelfileからモデルを作成
ollama show <モデル名> モデル情報を見る
ollama run <モデル名> モデルを実行
ollama stop <モデル名> モデルを停止
ollama pull <モデル名> モデルを取得
ollama push <モデル名> モデル一覧にモデルを登録
ollama list ロード済みモデル一覧
ollama ps 動作中モデル一覧
ollama cp <モデル名> <新しいモデル名> モデルのコピー
ollama rm <モデル名> モデルの削除

LiteLLM

  • LiteLLMのインストール
pip install "litellm[proxy]"
  • プロキシ設定ファイルを作成
nano litellm_config.yaml
model_list:
  # メンバーに利用を許可するモデルをここに列挙します
  - model_name: gemma3-4b          # メンバーがコードで指定する名前
    litellm_params:
      model: ollama/gemma3:4b          # Ollamaでの実際のモデル名
      api_base: <http://localhost:11434>

  - model_name: qwen3-4b
    litellm_params:
      model: ollama/qwen3:4b
      api_base: <http://localhost:11434>
  
  - model_name: openai/*         # openaiの全モデルを許可
    litellm_params:

今回は例として、"Gemma3 4B", "Qwen3 4B", "OpenAIのAPIアクセスモデル"を設定します。

※modelで指定する名前は以下を参照

Closedモデルのサポートのために、ワイルドカード設定を利用していますが、動作確認できていないためうまく動くかは不明です
https://docs.litellm.ai/docs/proxy/model_access

  • LiteLLM用のscreenセッションの中でLiteLLMプロキシを起動
# screenセッションを起動
screen -S litellm_proxy

# screenの中でプロキシを起動
litellm --config litellm_config.yaml

# screenからデタッチ (Ctrl + A -> D)

model情報を記述したconfigファイルを編集するたびにこの操作をやり直す必要があります

実行例

研究室の中のネットワーク内で実行するか否かで実行の仕方が異なります。
ネットワーク内ならば個人PCから直接LiteLLMを指定するだけで良いですが、外ならばremoteSSHでMac Studioかその他の研究室内のサーバーに繋ぐ必要があります。

Python
from openai import OpenAI

client = OpenAI(
	base_url = "http://<MacStudioのIPアドレス>:4000"	# MacStudio上のLiteLLMを指定
	api_key = "litellm"	# これはダミーコード(API利用ならAPIキー指定)
)

response = client.chat.completions.create(
	model = "gemma3-4b",	  # "設定済みモデル"に記載のカッコ内の設定名をそのまま転記
	messages = [
{"role": "user", "content": "こんにちは!"}
],
	temperature = 0.7,
)
print(response.choices[0].message.content)

感想

Macとはいえサーバーの設定というなかなかない機会をいただき良い経験になりました。
一方でネットワークに関する知識がまったくないことにも気づけたため、これを機にまとまった時間をとって勉強しなければと思いました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?