Knative Sequenceを作成してMLワークフローを合理化する¶
Knativeのどの機能について学習しますか?¶
- Knative Sequence
最終的な成果物はどのようなものですか?¶
- ステップ1として不適切な単語フィルターサービス、ステップ2としてセンチメント分析サービスを使用したKnative Sequenceを作成
- 最終結果は、シーケンスの応答としてBrokerに返送されます
実装¶
ステップ0:シーケンスを学習する¶
シーケンスは、呼び出される関数の順序付きリストを定義する方法を提供します。各ステップで、イベントの変更、フィルタリング、または新しい種類のイベントの作成を行うことができます。
イベントを目的の順序でさまざまなサービスを通過させたい場合は、Knative Sequenceが最適です。
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:シーケンスを作成する¶
クラスターにシーケンスリソースを作成するために、
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:イベントをシーケンスに渡すトリガーを作成する¶
シーケンスはリクエストを受け入れる準備ができたので、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
そして、この時点まで、クラスターには、作成した次のトリガーがあるはずです。
検証¶
次のコマンドで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"
}
次のステップ¶
このチュートリアルでは、シーケンスを作成してMLパイプラインを構築する方法を学習しました。
次に、Knative Servingを使用するのに最適なケースを学習しながら、書店データベースサービスを立ち上げる方法を学習します。