AIエージェントやコーディングエージェントの普及に伴い、企業のトークン利用量は急速に増加しています。そのため、トークンコストを適切に管理することが企業の重要な経営課題となりつつあります。
本記事では、AIモデルを一元的に管理し、認証・認可、APIキー管理、クォータ制御など、エンタープライズ環境においてAIモデルを利用するために必要な機能を提供する Red Hat® OpenShift® AI 3.4 のModel-as-a-Service(MaaS) 機能についてご紹介します。
- ライター:奈良 昌紀
- 通信事業者のデータセンターにおいてネットワーク・サーバー運用を経験した後、ネットワンシステムズに入社。帯域制御やWAN高速化製品担当を経て、2008年から仮想化関連製品を担当。現在は主にクラウドやコンテナなどの技術領域を担当。
目次
Model-as-a-Service (MaaS)とは
OpenShift AI 3.4でGA(Generally Available:一般提供版)となったModel-as-a-Serviceは、エンタープライズ環境でAIモデルをAPIエンドポイントとして提供する際に必要とされる以下の機能を提供し、AIモデルに対する一元的な運用とガバナンスを実現します。
- 認証・認可ポリシーによるアクセス制御
- サブスクリプションによるクォータ制御
- セルフサービスAPIキー管理
- オブザーバビリティ(Technology Preview)
- 外部モデル(OpenAIやAnthropic等)の統合管理 (Technology Preview)
本記事では 、OpenShift AI 3.4 の MaaS 機能に含まれるTechnology Preview機能に関して言及しています。Technology Previewは開発段階にある新製品の機能であり、本番環境での利用はサポートされませんのでご注意ください。
アーキテクチャ
MaaSにおける認証・認可、クォータ管理にはRed Hat® Connectivity Link®が利用されています。Connectivity LinkはオープンソースプロジェクトであるKuadrantをベースとしており、Kubernetes Gateway APIを利用してモデルをサービングするAPIエンドポイントに対する認証・認可およびレート制限を実現します。
認証・認可はAuthorino、クォータ制限はLimitadorによって提供されます。AuthorinoおよびLimitadorは、APIエンドポイントを公開するHTTPRouteに対してPolicy Attachmentの仕組みを用いて、AuthPolicyとTokenRateLimitPolicyを適用し、APIエンドポイントへのアクセス制御およびクォータ制御を実現します。
OpenShift AIではGateway APIのデータプレーンとしてEnvoy(Istio)を利用しているため、AuthPolicy, TokenRateLimitPolicyに関するWASMフィルターがEnvoy内に構成され、authorino pod、limitador podに対して問い合わせを行う形でトラフィックが処理されます。
MaaSの利用方法
OpenShift AI 3.4ではMaaSはデフォルトでは有効とならないため、ドキュメントに従ってOpenShift AIの構成を定義するDataScienceClusterやOdhDashboardConfigを変更してMaaSを有効化する必要があります。MaaSを有効化すると、redhat-ods-applicationsネームスペースにmaas-controller podとmaas-api podが作成されます。
$ oc get pod -n redhat-ods-applications -l app.kubernetes.io/part-of=modelsasservice
NAME READY STATUS RESTARTS AGE
maas-controller-7dc76c9597-475q7 1/1 Running 0 17h
$ oc get pod -n redhat-ods-applications -l app.kubernetes.io/part-of=models-as-a-service
NAME READY STATUS RESTARTS AGE
maas-api-85487856b8-5k992 1/1 Running 0 17h
GUI上では「Gen AI studio」メニュー配下に「AI asset endpoints」や「API keys」、「Settings」メニュー配下に「Subscriptions」や「Authorization policies」などのメニューが追加されます。
モデルのデプロイ
モデルデプロイ時に「Publish as MaaS」を選択するとMaaSから管理可能なモデルとして構成されます。(Technology Preview)
MaaSによって管理されるモデルは、Gateway APIによって公開されるためHTTPRouteリソースが作成され、vLLM Podへトラフィックがルーティングされます。デプロイ時に「Deployment resource」として「Distributed inference with llm-d」を選択すると、llm-dのEPPがデプロイされ、MaaS用 Gateway APIとEPPが連携し、InferencePoolを介してvLLM Podへ転送する構成になります。
この構成により、Authorinoによる認証・認可、Limitadorによるクォータ制御に加えてllm-dの機能であるKVキャッシュ利用率やキュー長、prefixキャッシュヒット率などのリアルタイムメトリクスに基づいた最適なエンドポイントの選択が可能になります。
$ oc tree llminferenceservice gpt-oss-20b -n demo
NAMESPACE NAME READY REASON STATUS AGE
demo LLMInferenceService/gpt-oss-20b True Current 12h
demo ├─Deployment/gpt-oss-20b-kserve - - 108s
demo │ └─ReplicaSet/gpt-oss-20b-kserve-799c7bb6fc - - 108s
demo │ └─Pod/gpt-oss-20b-kserve-799c7bb6fc-x4nvl True Current 108s
demo ├─DestinationRule/gpt-oss-20b-kserve-workload-svc - - 108s
demo ├─HTTPRoute/gpt-oss-20b-kserve-route - - 108s
demo │ └─TokenRateLimitPolicy/maas-trlp-gpt-oss-20b - - 108s
demo ├─MaaSModelRef/gpt-oss-20b True Reconciled Current 12h
demo ├─Secret/gpt-oss-20b-kserve-self-signed-certs - - 108s
demo └─Service/gpt-oss-20b-kserve-workload-svc - - 108s
demo └─EndpointSlice/gpt-oss-20b-kserve-workload-svc-xhv5t - - 108s
デプロイしたモデルはMaasModelRefリソースによりMaaSの管理モデルとして識別されます。
$ oc get maasmodelrefs.maas.opendatahub.io -n demo
NAME PHASE ENDPOINT HTTPROUTE GATEWAY AGE
gpt-oss-20b Ready https://maas.apps.sno.techlab.netone.co.jp/demo/gpt-oss-20b gpt-oss-20b-kserve-route maas-default-gateway 11h
qwen Ready https://maas.apps.sno.techlab.netone.co.jp/demo/qwen qwen-kserve-route maas-default-gateway 11h
Subscriptionの作成
モデルに対するクォータ制限を設定するために、サブスクリプションが必要になります。サブスクリプション作成時にMaaSで管理されているモデルをサブスクリプションに登録することが可能です。
サブスクリプションに登録した各モデルごとにtoken limitsを指定できます。
Authorization Policyの作成
Authorization Policyに対してモデルを登録することで、API keyを利用したアクセスが可能になります。
API keyの作成
サブスクリプションを作成すると、サブスクリプションを利用するためのAPI keyを作成することが可能になります。選択したサブスクリプションでアクセス可能なモデルを確認し、API keyの有効期限を選択します。MaaS側の制限としてAPI keyの有効期限は最大90日となっています。
モデルアクセスの確認
デプロイしたモデルは、MaaSのAPIエンドポイントを介して利用できます。また、Subscriptionによるクォータ制御が適用されるため、設定した利用上限を超えるリクエストはブロックされます。
以下の例は、MaaSを利用してデプロイした gpt-oss-20b に対してcurlコマンドからアクセスできるかを確認している様子です。
接続先にはMaaSのエンドポイントを指定し、認証にはMaaSの API Key を使用しています。
$ curl -sk -H "Authorization: Bearer $API_KEY" https://maas.apps.sno.techlab.netone.co.jp/demo/gpt-oss-20b/v1/models | jq
{
"object": "list",
"data": [
{
"id": "gpt-oss-20b",
"object": "model",
"created": 1783260572,
"owned_by": "vllm",
"root": "/mnt/models",
"parent": null,
"max_model_len": 131072,
"permission": [
{
"id": "modelperm-a40d490a31c52220",
"object": "model_permission",
"created": 1783260572,
"allow_create_engine": false,
"allow_sampling": true,
"allow_logprobs": true,
"allow_search_indices": false,
"allow_view": true,
"allow_fine_tuning": false,
"organization": "*",
"group": null,
"is_blocking": false
}
]
}
]
}
外部モデルの管理 (Technology Preview)
OpenAI、Anthropicなどの外部プロバイダーが提供するAPIをExternalModelリソースとして登録し、AuthPolicy、TokenRateLimitPolicyを適用することで、認証・認可、クォータ制限を適用できます。
OpenAIのモデルを登録する場合、以下のようなマニフェストで登録することができます。
apiVersion: maas.opendatahub.io/v1alpha1
kind: ExternalModel
metadata:
name: gpt-4o-mini
namespace: llm
spec:
provider: openai
targetModel: gpt-4o-mini
endpoint: api.openai.com
credentialRef:
name: openai-api-key
---
apiVersion: maas.opendatahub.io/v1alpha1
kind: MaaSModelRef
metadata:
name: gpt-4o-mini
namespace: llm
spec:
modelRef:
kind: ExternalModel
name: gpt-4o-mini
登録された外部モデルは、「AI asset endpoints」として登録され、OpenShift AIとしてデプロイしたモデルと同様に認証・認可、クォータ制限を提供することが可能になります。
外部モデルへのアクセスの確認
MaaSに登録した外部モデルに対しても個別にエンドポイントが生成されます。各エンドポイントに対するリクエストは、ExternalNameサービスにより外部のAPIに転送されています。
$ oc get maasmodelrefs.maas.opendatahub.io -n llm
NAME PHASE ENDPOINT HTTPROUTE GATEWAY AGE
gemma-3-12b-it Ready https://maas.apps.sno.techlab.netone.co.jp/llm/gemma-3-12b-it gemma-3-12b-it maas-default-gateway 105m
gpt-4o-mini Ready https://maas.apps.sno.techlab.netone.co.jp/llm/gpt-4o-mini gpt-4o-mini maas-default-gateway 3h8m
$ oc get svc -n llm
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
gemma-3-12b-it ExternalName bedrock-mantle.ap-northeast-1.api.aws 443/TCP 4h10m
gpt-4o-mini ExternalName api.openai.com 443/TCP 4h57m
外部モデルに対してもSubscriptionとSubscription Policyを設定することで、MaaSのAPIエンドポイント経由で外部モデルを利用できます。 以下は、MaaSに登録した OpenAI の gpt-4o-mini へ curl コマンドでリクエストを送信し、テキスト応答を取得している例です。
接続先にはMaaSのエンドポイントを指定し、認証にはMaaSのAPI Keyを使用しています。これにより、利用者は OpenAI の API を直接呼び出すことなく、MaaSを経由してモデルへアクセスできます。 また、アクセスはすべてMaaSの管理下で処理されるため、Subscriptionごとのクォータ制御やアクセス制限を適用することが可能です。
$ curl -sk https://maas.apps.sno.techlab.netone.co.jp/llm/gpt-4o-mini/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${API_KEY}" \
-d '{"model":"gpt-4o-mini","messages":[{"role":"user","content":"Hello"}]}' | jq
{
"id": "chatcmpl-DyIE3ZaLB6mcgo7uYOMxIFST6LYnX",
"object": "chat.completion",
"created": 1783262111,
"model": "gpt-4o-mini-2024-07-18",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello! How can I assist you today?",
"refusal": null,
"annotations": []
},
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 8,
"completion_tokens": 9,
"total_tokens": 17,
"prompt_tokens_details": {
"cached_tokens": 0,
"audio_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 0,
"audio_tokens": 0,
"accepted_prediction_tokens": 0,
"rejected_prediction_tokens": 0
}
},
"service_tier": "default",
"system_fingerprint": "fp_a5a1892700"
}
Observability Dashboard (Technology Preview)
MaaSの機能としてモニタリングを有効化すると、OpenShiftのUser Workload Monitoringと、Cluster Observability Operatorを利用してテンプレートとダッシュボードが構成され、OpenShift AIの管理画面で表示することが可能になります。このダッシュボードでは、Kuadrantで管理されるGateway APIの状態メトリクス、Connectivity Linkコンポーネントで公開されるメトリクス、Envoyで公開される標準メトリクスが使用されます。
クラスターレベルのGPUリソースの利用率や、各モデルのリクエスト遅延、TTFT(Time to first token)等の詳細情報、サブスクリプション単位、ユーザー単位、モデル単位でToken数やリクエスト数を表示することが可能です。


まとめ
OpenShift AIの新機能であるModel-as-a-Serviceは推論のためのAPIエンドポイントの一元的な管理を可能にします。llm-dによって強化された推論機能に対し、強力な管理機能に加えて、エンタープライズ環境で必要とされるクォータ制御やオブザーバビリティ機能を提供し、企業内におけるプライベートかつスケーラブルなAI導入を可能にします。
AIアプリケーションのためのソフトウェア、オンプレのサーバーやネットワーク、ストレージについてラボでのデモンストレーションも可能ですので、気になる方は、ぜひ、弊社担当にご連絡ください。
Red Hat、Red Hat Enterprise、Red Hat logo、およびOpenShiftは、米国およびその他の国における Red Hat, Inc. およびその子会社の商標または登録商標です。
Linux®は、米国およびその他の国におけるLinus Torvaldsの登録商標です。
※本記事の内容は執筆者個人の見解であり、所属する組織の見解を代表するものではありません。
組織・製品等の名称は執筆時点のものです。