# モデルをデプロイ

どの Hugging Face モデル（テキスト、画像、動画、音声）でも、vLLM、SGLang、vLLM-Omni、llama.cpp と自分のエンジンオプションで動かせます。専用の API キーつきの OpenAI 互換エンドポイントと、root 権限での SSH が使えます。

## コンソールで確認

1. [コンソール](/console/#/models)で **Models** を開きます。
2. `Qwen/Qwen3-8B` のように Hugging Face での名前でモデルを指定するか、そのページのリンクを貼り付けます。
3. エンジンを選びます。テキストモデルには **vLLM** か **SGLang**、画像と動画のモデルには **vLLM-Omni** か **SGLang**、音声とサウンドには **vLLM-Omni**、GGUF ファイルには **llama.cpp** です。llama.cpp では、`unsloth/Qwen3-8B-GGUF:Q4_K_M` のようにコロンのあとに量子化を加えます。
4. 自分のエンジンオプションがあれば貼り付けます（下記参照）。
5. アクセス制限つき（gated）のモデルや非公開のモデルでは、読み取り権限のある Hugging Face トークンを追加します。
6. **Find GPUs** は Hugging Face からモデルのサイズを読み取り、マシンが実行する起動コマンドを表示し、そのモデルが今収まる GPU をすべて価格とともに一覧表示します。いずれかを選んでレンタルします。

エンジンはマシンの起動時にモデルをダウンロードするため、エンドポイントが応答するのは数分後です。**Models** には、準備ができたかどうか、アドレス、API キー、呼び出し用のコード、チャットと画像モデルの試用、エンジンのログが表示されます。

## 自分のエンジンオプション

チューニングしたオプションを、手元にある形のまま貼り付けてください。

```sh
VLLM_USE_DEEP_GEMM=1 vllm serve Qwen/Qwen3-8B \
  --max-model-len 32768 --enable-prefix-caching \
  --speculative-config '{"method": "eagle3", "num_speculative_tokens": 3}'
```

フラグだけでも、コマンド全体でも、`docker run` の行でも使えます。先頭の環境変数や、引用符で囲んだ JSON の値もそのままです。オプションを選び、エンジンのリリースに合わせて最新に保つのはあなたです。Arrakis はシェルを通さずに読み取り、一語ずつそのままエンジンに渡します。そのため：

- シェルの構文（`;`、`|`、`&&`、`$(...)`、`$VARIABLES`）は受け付けません。実行するものが何もないからです。
- エンジンの待ち受け先（`--host`、`--port`）、キー（`--api-key`）、モデルは Arrakis が受け持つため、エンドポイントのアドレスとキーは変わりません。`--served-model-name`（llama.cpp では `--alias`）で、リクエストで使うモデル名を変えられます。
- 並列化はあなたの指定が優先です。オプションに `-tp`、`--tp`、`-dp` があれば、Arrakis は自分の指定を加えません。
- GPU を選ぶ設定（`NVIDIA_*`）とローダーの設定（`LD_*`）は受け付けません。マシンが使うのは借りた GPU だけです。
- Hugging Face トークンはオプションではなく専用の欄に入れてください。オプションと一緒に保存されることはありません。

## API から

```sh
curl -X POST $ARRAKIS_URL/v1/deploy \
  -H "Authorization: Bearer ark_..." \
  -H "Content-Type: application/json" \
  -d '{"model": "black-forest-labs/FLUX.1-schnell", "engine": "omni", "termination_hours": 4,
       "extra_args": "--enforce-eager"}'
```

`node_id` がなければ、Arrakis はモデルが収まる中でいちばん評価の高いマシンを、できるだけ少ない GPU 数でレンタルします。`POST /v1/deploy/plan` は、収まる GPU を先に無料で一覧表示し、`extra_args` があればオプションを検査して起動コマンドを返します。応答にはエンドポイントとその `api_key` が含まれます。`GET /v1/instances/{id}/endpoint` はそれらをもう一度返し、モデルが応答すると `ready` になります。`GET /v1/instances/{id}/endpoint/log` はエンジンのログの末尾を返します。エージェントは [MCP](/ja/docs/agents) 経由で `deploy_model` ツールを使います。

## 呼び出す

エンドポイントは OpenAI の API を話すので、OpenAI のクライアントならどれでも使えます。リクエストで指定するモデル名は、名前を変えていなければ、量子化を除いた Hugging Face の ID です。

```python
from openai import OpenAI

client = OpenAI(base_url="http://<address>/v1", api_key="sk-...")
reply = client.chat.completions.create(
    model="Qwen/Qwen3-8B",
    messages=[{"role": "user", "content": "Hello"}],
)
print(reply.choices[0].message.content)
```

| モデルが生成するもの | 呼び出し先 |
|---|---|
| テキスト | `POST /v1/chat/completions`、`/v1/completions`、`/v1/embeddings` |
| イメージ | `POST /v1/images/generations`、`/v1/images/edits` |
| 動画 | `POST /v1/videos`、完了するまで `GET /v1/videos/{id}`、そして `GET /v1/videos/{id}/content` |
| 音声 | `POST /v1/audio/speech` |
| サウンドと音楽 | `POST /v1/audio/generate` |
| 音声からのテキスト | `POST /v1/audio/transcriptions` |

## マシンはあなたのもの

- 通常のレンタルと同じです。時間単位で課金され、削除時刻に削除され、**Instances** に表示されます。
- エンジンの公式リリースをもとにした Arrakis イメージで起動し、root 権限で SSH できます。マシン上で `arrakis-serve status`、`arrakis-serve logs`、`arrakis-serve restart` を実行できます。
- 新しいマシンなしでほかのオプションを試すには、`/etc/arrakis/serve/command`（一行に一語）か `/etc/arrakis/serve/env` を編集して、`arrakis-serve restart` を実行します。エンジンが止まってもマシンは動き続けるので、その場で直せます。
- エンドポイントは、プレーンな HTTP でのマシンのアドレスです。ポート 8000 のアクセスゲートが、リクエストがエンジンに届く前に API キー（`Authorization: Bearer <key>`）を確認します。エンジンはマシンの内側でしか待ち受けません。`/health` はキーなしで応答し、エンジンが動いているかどうかだけを返します。非公開の通信には SSH トンネル（`ssh root@<host> -p <port> -N -L 8000:localhost:8000`）を開き、`http://localhost:8000/v1` を使ってください。
- Hugging Face トークンは `HF_TOKEN` としてマシンに渡され、Arrakis はそれを保存しません。マシンのホストはマシン上で動作するものを読み取れるため、権限を絞った（fine-grained）読み取り専用トークンを使ってください。

その他：[すべてのドキュメント](/ja/docs.md) · [OpenAPI](/openapi.json) · [llms.txt](/ja/llms.txt)
