コンテンツへスキップ

Knative Sequenceを作成してMLワークフローを合理化する

image

Knativeのどの機能について学習しますか?

  • Knative Sequence

最終的な成果物はどのようなものですか?

image

  • ステップ1として不適切な単語フィルターサービス、ステップ2としてセンチメント分析サービスを使用したKnative Sequenceを作成
  • 最終結果は、シーケンスの応答としてBrokerに返送されます

実装

ステップ0:シーケンスを学習する

シーケンスは、呼び出される関数の順序付きリストを定義する方法を提供します。各ステップで、イベントの変更、フィルタリング、または新しい種類のイベントの作成を行うことができます。

イベントを目的の順序でさまざまなサービスを通過させたい場合は、Knative Sequenceが最適です。

image

apiVersion: flows.knative.dev/v1
kind: Sequence
metadata:
  name: sequence
spec:
  channelTemplate:
    apiVersion: messaging.knative.dev/v1
    kind: InMemoryChannel
  steps:
    - ref:
        apiVersion: serving.knative.dev/v1
        kind: Service
        name: first
    - ref:
        apiVersion: serving.knative.dev/v1
        kind: Service
        name: second
  reply:
    ref:
      kind: Service
      apiVersion: serving.knative.dev/v1
      name: event-display

ステップ1:シーケンスを作成する

image クラスターにシーケンスリソースを作成するために、sequence/config/100-create-sequence.yamlという名前の新しいyamlファイルを作成します

sequence/config/100-create-sequence.yaml
apiVersion: flows.knative.dev/v1
kind: Sequence
metadata:
  name: sequence
spec:
  channelTemplate: # Under the hood, the Sequence will create a Channel for each step in the Sequence
    apiVersion: messaging.knative.dev/v1
    kind: InMemoryChannel
  steps:
    - ref: # This is the first step of the Sequence, it will send the event to the bad-word-filter service
        apiVersion: serving.knative.dev/v1
        kind: Service
        name: bad-word-filter
    - ref: # This is the second step of the Sequence, it will send the event to the sentiment-analysis-app service
        apiVersion: serving.knative.dev/v1
        kind: Service
        name: sentiment-analysis-app
  reply: # This is the last step of the Sequence, it will send the event back to the Broker as reply
    ref:
      kind: Broker
      apiVersion: eventing.knative.dev/v1
      name: bookstore-broker

シーケンスyamlファイルを作成し、クラスターに適用します。

kubectl apply -f sequence/config/100-create-sequence.yaml

構成を適用すると、次の出力が表示されるはずです

sequence.flows.knative.dev/sequence created
検証

シーケンスのステータスは非常に簡単に確認できます

kubectl get sequences

sequenceのReadyステータスがTrueになっていることを確認する必要があります。

NAME       URL                                                                  AGE    READY   REASON
sequence   http://sequence-kn-sequence-0-kn-channel.default.svc.cluster.local   159m   True    

ステップ2:イベントをシーケンスに渡すトリガーを作成する

image

シーケンスはリクエストを受け入れる準備ができたので、Brokerにイベントをシーケンスに転送するように指示する必要があります。これにより、新しいコメントがMLワークフローを通過します。

sequence/config/200-create-trigger.yamlという名前のトリガーyamlファイルを作成します

sequence/config/200-create-trigger.yaml
apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
  name: sequence-trigger
spec:
  broker: bookstore-broker
  filter:
    attributes:
      type: new-review-comment # This is the filter that will be applied to the event, only events with the ce-type new-review-comment will be processed
  subscriber:
    ref:
      apiVersion: flows.knative.dev/v1
      kind: Sequence
      name: sequence

クラスターに適用します。

kubectl apply -f sequence/config/200-create-trigger.yaml

次の出力が表示されるはずです

trigger.eventing.knative.dev/sequence-trigger created
検証

トリガーのステータスは非常に簡単に確認できます

kubectl get triggers

トリガーが準備完了状態になっているはずです。

NAME                BROKER             SUBSCRIBER_URI                                                       AGE    READY   REASON
sequence-trigger    bookstore-broker   http://sequence-kn-sequence-0-kn-channel.default.svc.cluster.local   162m   True    
log-trigger        bookstore-broker    http://event-display.default.svc.cluster.local                       164m   True    

そして、この時点まで、クラスターには、作成した次のトリガーがあるはずです。 image

検証

image

次のコマンドでevent-displayのログを開きます

kubectl logs event-display-XXXXX -f

UIのコメントボックスに何かを入力し、送信ボタンをクリックします。bookstore-brokerが受信したすべてのイベントがevent-displayに表示されます。

検証

コメントは、event-displayサービスに次の出力で表示されるはずです

☁️cloudevents.Event
Validation: valid
Context Attributes,
specversion: 1.0
type: moderated-comment
source: sentiment-analysis
id: 2f703218-15d4-4ff8-b2bc-11200e209315
time: 2024-04-21T01:26:27.608365Z
datacontenttype: application/json
Extensions,
badwordfilter: bad
knativearrivaltime: 2024-04-21T01:26:27.617405597Z
sentimentresult: negative
Data,
{
    "reviewText": "XXXXXXXXXXXX",
    "badWordResult": "bad",
    "sentimentResult": "negative"
}

次のステップ

image

このチュートリアルでは、シーケンスを作成してMLパイプラインを構築する方法を学習しました。

次に、Knative Servingを使用するのに最適なケースを学習しながら、書店データベースサービスを立ち上げる方法を学習します。

データベースサービスのデプロイに進む

当社は、サイトのトラフィックを理解するために、分析とCookieを使用しています。当サイトのご利用に関する情報は、その目的のためにGoogleと共有されます。詳細はこちら。