ページの先頭です

ページ内を移動するためのリンク
本文へ (c)

ここから本文です。

Model-as-a-ServiceによるAIモデル提供基盤

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.4GA(Generally Available:一般提供版)となったModel-as-a-Serviceは、エンタープライズ環境でAIモデルをAPIエンドポイントとして提供する際に必要とされる以下の機能を提供し、AIモデルに対する一元的な運用とガバナンスを実現します。

  • 認証・認可ポリシーによるアクセス制御
  • サブスクリプションによるクォータ制御
  • セルフサービスAPIキー管理
  • オブザーバビリティ(Technology Preview)
  • 外部モデル(OpenAIAnthropic)の統合管理 (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の仕組みを用いて、AuthPolicyTokenRateLimitPolicyを適用し、APIエンドポイントへのアクセス制御およびクォータ制御を実現します。

OpenShift AIではGateway APIのデータプレーンとしてEnvoy(Istio)を利用しているため、AuthPolicy, TokenRateLimitPolicyに関するWASMフィルターがEnvoy内に構成され、authorino podlimitador podに対して問い合わせを行う形でトラフィックが処理されます。

MaaSの利用方法

OpenShift AI 3.4ではMaaSはデフォルトでは有効とならないため、ドキュメントに従ってOpenShift AIの構成を定義するDataScienceClusterOdhDashboardConfigを変更してMaaSを有効化する必要があります。MaaSを有効化すると、redhat-ods-applicationsネームスペースにmaas-controller podmaas-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-dEPPがデプロイされ、MaaS Gateway APIEPPが連携し、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)

OpenAIAnthropicなどの外部プロバイダーが提供するAPIExternalModelリソースとして登録し、AuthPolicyTokenRateLimitPolicyを適用することで、認証・認可、クォータ制限を適用できます。
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数やリクエスト数を表示することが可能です。

maas-dashboard1maas-dashboard2maas-dashboard3.jpg

まとめ

OpenShift AIの新機能であるModel-as-a-Serviceは推論のためのAPIエンドポイントの一元的な管理を可能にします。llm-dによって強化された推論機能に対し、強力な管理機能に加えて、エンタープライズ環境で必要とされるクォータ制御やオブザーバビリティ機能を提供し、企業内におけるプライベートかつスケーラブルなAI導入を可能にします。

AIアプリケーションのためのソフトウェア、オンプレのサーバーやネットワーク、ストレージについてラボでのデモンストレーションも可能ですので、気になる方は、ぜひ、弊社担当にご連絡ください。

Red HatRed Hat EnterpriseRed Hat logo、およびOpenShiftは、米国およびその他の国における Red Hat, Inc. およびその子会社の商標または登録商標です。

Linux®は、米国およびその他の国におけるLinus Torvaldsの登録商標です。

※本記事の内容は執筆者個人の見解であり、所属する組織の見解を代表するものではありません。
組織・製品等の名称は執筆時点のものです。

RECOMMEND