diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/1-workshop-setup/1-aws-setup.md b/content/ja/ninja-workshops/14-cisco-ai-pods/1-workshop-setup/1-aws-setup.md new file mode 100644 index 0000000000..ebc83c4993 --- /dev/null +++ b/content/ja/ninja-workshops/14-cisco-ai-pods/1-workshop-setup/1-aws-setup.md @@ -0,0 +1,30 @@ +--- +title: AWSセットアップ +linkTitle: 1. AWSセットアップ +weight: 1 +time: 10 minutes +--- + +## AWSでRed Hat OpenShiftサービスを有効にする + +AWSアカウントにOpenShiftをデプロイするには、まず[AWSコンソール](https://us-east-1.console.aws.amazon.com/rosa/home?region=us-east-1#/)を使用してRed Hat OpenShiftサービスを有効にする必要があります。 + +次に、AWSアカウントをRed Hatアカウントに接続する手順に従ってください。 + +## EC2インスタンスのプロビジョニング + +Red Hatクラスターをデプロイするために使用するEC2インスタンスをプロビジョニングしましょう。これにより、Mac OSでROSAコマンドラインインターフェースを実行する際の制限を回避できます。 + +このワークショップの作成時にはUbuntu 24.04 LTSを使用したt3.xlargeインスタンスタイプを使用しましたが、より小さなインスタンスタイプも使用できます。 + +インスタンスが起動したら、sshで接続してください。 + +## GitHubリポジトリのクローン + +GitHubリポジトリをEC2インスタンスにクローンします: + +``` bash +git clone https://github.com/splunk/observability-workshop.git + +cd observability-workshop/workshop/cisco-ai-pods +``` diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/1-workshop-setup/10-cleanup.md b/content/ja/ninja-workshops/14-cisco-ai-pods/1-workshop-setup/10-cleanup.md new file mode 100644 index 0000000000..d721078a41 --- /dev/null +++ b/content/ja/ninja-workshops/14-cisco-ai-pods/1-workshop-setup/10-cleanup.md @@ -0,0 +1,48 @@ +--- +title: クリーンアップ +linkTitle: 10. クリーンアップ +weight: 10 +time: 5 minutes +--- + +## クリーンアップ手順 + +ワークショップが完了したら、このセクションの手順に従って OpenShift クラスターをアンインストールします。 + +以下のコマンドを実行して、クラスター ID、クラスター固有の Operator ロールの Amazon Resource Names(ARN)、および OIDC プロバイダーのエンドポイント URL を取得します。 + +``` bash +rosa describe cluster --cluster=$CLUSTER_NAME +``` + +以下のコマンドを使用してクラスターを削除します。 + +``` bash +rosa delete cluster --cluster=$CLUSTER_NAME --watch +``` + +クラスター固有の Operator IAM ロールを削除します。 + +> 注意: プロンプトが表示されたら、デフォルト値をそのまま受け入れてください。 + +``` bash +rosa delete operator-roles --prefix $OPERATOR_ROLES_PREFIX +``` + +OIDC プロバイダーを削除します。 + +> 注意: プロンプトが表示されたら、デフォルト値をそのまま受け入れてください。 + +``` bash +rosa delete oidc-provider --oidc-config-id $OIDC_ID +``` + +ネットワークを削除します。 + +> 注意: 以下のコマンドを実行する前に、ネットワークの作成に使用した CloudFormation スタックの名前を追加してください。 + +``` bash +aws cloudformation delete-stack --region $AWS_REGION --stack-name +``` + +AWS アカウントから Red Hat OpenShift Service を完全に削除したい場合は、[OpenShift のドキュメント](https://docs.redhat.com/en/documentation/red_hat_openshift_service_on_aws/4/html/install_clusters/rosa-hcp-deleting-cluster)を参照してください。 diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/1-workshop-setup/2-openshift-prereqs.md b/content/ja/ninja-workshops/14-cisco-ai-pods/1-workshop-setup/2-openshift-prereqs.md new file mode 100644 index 0000000000..f4ebcc6564 --- /dev/null +++ b/content/ja/ninja-workshops/14-cisco-ai-pods/1-workshop-setup/2-openshift-prereqs.md @@ -0,0 +1,140 @@ +--- +title: OpenShiftの前提条件 +linkTitle: 2. OpenShiftの前提条件 +weight: 2 +time: 15 minutes +--- + +以下の手順は、AWSにOpenShiftクラスターをデプロイする前に必要です。 + +## Red Hatログインの作成 + +最初に行う必要があるのは、Red Hatのアカウントを作成することです。[こちら](https://www.redhat.com/wapps/ugc/register.html?_flowId=register-flow&_flowExecutionKey=e1s1)のフォームに記入して作成できます。 + +## AWS CLIのインストール + +以前プロビジョニングしたEC2インスタンスにAWS CLIをインストールするには、以下のコマンドを実行します: + +``` bash +curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" +sudo apt install unzip +unzip awscliv2.zip +sudo ./aws/install +``` + +以下のコマンドを使用して、正常にインストールされたことを確認します: + +``` bash +aws --version +``` + +以下のような結果が返されるはずです: + +```` +aws-cli/2.30.5 Python/3.13.7 Linux/6.14.0-1011-aws exe/x86_64.ubuntu.24 +```` + +お好みの方法でAWSアカウントにログインしてください。ガイダンスについては[ドキュメント](https://docs.aws.amazon.com/signin/latest/userguide/command-line-sign-in.html)を参照してください。例えば、`aws configure`コマンドを実行してログインできます。 + +`aws ec2 describe-instances`などのコマンドを実行して、正常にログインできていることを確認してください。 + +次に、以下のコマンドでアカウントIDを確認します: + +``` bash +aws sts get-caller-identity +``` + +ELB (Elastic Load Balancing)のサービスロールが存在するかどうかを確認します: + +``` bash +aws iam get-role --role-name "AWSServiceRoleForElasticLoadBalancing" +``` + +ロールが存在しない場合は、以下のコマンドを実行して作成します: + +``` bash +aws iam create-service-linked-role --aws-service-name "elasticloadbalancing.amazonaws.com" +``` + +## ROSA CLIのインストール + +デプロイにはROSAコマンドラインインターフェース (CLI)を使用します。手順は[Red Hatドキュメント](https://docs.redhat.com/en/documentation/red_hat_openshift_service_on_aws_classic_architecture/4/html-single/install_rosa_classic_clusters/index#rosa-installing-and-configuring-the-rosa-cli_rosa-installing-cli)に基づいています。 + +お使いのオペレーティングシステム用のROSA CLIの最新リリースは[こちら](https://console.redhat.com/openshift/downloads)からダウンロードできます。 + +または、以下のコマンドを使用してCLIバイナリをEC2インスタンスに直接ダウンロードすることもできます: + +```` +curl -L -O https://mirror.openshift.com/pub/cgw/rosa/latest/rosa-linux.tar.gz +```` + +コンテンツを解凍します: + +```` +tar -xvzf rosa-linux.tar.gz +```` + +結果のファイル(`rosa`)をパスに含まれている場所に移動します。例えば: + +``` bash +sudo mv rosa /usr/local/bin/rosa +``` + +以下のコマンドを実行してRed Hatアカウントにログインし、コマンド出力の指示に従ってください: + +```` +rosa login --use-device-code +```` + +## OpenShift CLI (oc)のインストール + +以下のコマンドを使用して、OpenShift CLIバイナリをEC2インスタンスに直接ダウンロードできます: + +```` +curl -L -O https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/stable/openshift-client-linux.tar.gz +```` + +コンテンツを解凍します: + +```` +tar -xvzf openshift-client-linux.tar.gz +```` + +結果のファイル(`oc`と`kubectl`)をパスに含まれている場所に移動します。例えば: + +``` bash +sudo mv oc /usr/local/bin/oc +sudo mv kubectl /usr/local/bin/kubectl +``` + +## アカウント全体のロールとポリシーの作成 + +以下のコマンドを使用して、必要なアカウント全体のロールとポリシーを作成します: + +``` bash +rosa create account-roles --mode auto +``` + +## ROSA HCP用のAWS VPCの作成 + +OpenShiftクラスターをデプロイするために、Hosted Control Plane (HCP)デプロイオプションを使用します。これを行うには、以下のコマンドを使用してAWSアカウントに新しいVPCを作成する必要があります: + +> 注意: リージョンを環境に合わせて更新してください。 + +``` bash +rosa create network network-template --param Region=us-east-2 --param Name=rosa-network-stack --template-dir='.' +``` + +> 重要: このコマンドの結果として作成されたサブネットIDをメモしておいてください。クラスターを作成する際に必要になります。また、ネットワークを削除する場合に後で必要になるCloudFormationスタック名もメモしておいてください。 + +> 注意: デフォルトでは、各AWSリージョンはElastic IPアドレスが5つに制限されています。「The maximum number of addresses has been reached.」というエラーが発生した場合は、AWSに連絡してこの制限の引き上げをリクエストするか、ROSA用のVPCを作成するために別のAWSリージョンを選択する必要があります。 + +## OpenID Connect設定の作成 + +Red Hat OpenShift Service on AWSクラスターを作成する前に、以下のコマンドでOpenID Connect (OIDC)設定を作成しましょう: + +``` bash +rosa create oidc-config --mode=auto --yes +``` + +> 重要: 作成されたoidc-provider idをメモしておいてください。 diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/1-workshop-setup/3-deploy-openshift-cluster.md b/content/ja/ninja-workshops/14-cisco-ai-pods/1-workshop-setup/3-deploy-openshift-cluster.md new file mode 100644 index 0000000000..e72ee5e705 --- /dev/null +++ b/content/ja/ninja-workshops/14-cisco-ai-pods/1-workshop-setup/3-deploy-openshift-cluster.md @@ -0,0 +1,83 @@ +--- +title: AWSにOpenShiftクラスターをデプロイする +linkTitle: 3. AWSにOpenShiftクラスターをデプロイする +weight: 3 +time: 25 minutes +--- + +## OpenShiftクラスターのデプロイ + +ROSA CLIを使用してOpenShiftクラスターをデプロイします。 + +まず、いくつかの環境変数を設定する必要があります: + +> 注意: EXPORTコマンドを実行する前に、サブネットIDとOIDC IDを入力してください。 + +``` bash +export CLUSTER_NAME=rosa-test +export AWS_REGION=us-east-2 +export AWS_INSTANCE_TYPE=g5.4xlarge +export SUBNET_IDS= +export OIDC_ID= +export OPERATOR_ROLES_PREFIX=rosa-test-a6x9 +``` + +以下のコマンドを使用して、OIDC設定用のオペレーターロールを作成します: + +> 注意: プロンプトが表示されたら、デフォルト値をそのまま使用してください。 + +``` bash +rosa create operator-roles --hosted-cp --prefix $OPERATOR_ROLES_PREFIX --oidc-config-id $OIDC_ID +``` + +次に、以下のようにしてクラスターを作成できます: + +``` bash +rosa create cluster \ + --cluster-name $CLUSTER_NAME \ + --mode auto \ + --hosted-cp \ + --sts \ + --create-admin-user \ + --operator-roles-prefix $OPERATOR_ROLES_PREFIX \ + --oidc-config-id $OIDC_ID \ + --subnet-ids $SUBNET_IDS \ + --compute-machine-type $AWS_INSTANCE_TYPE \ + --replicas 2 \ + --region $AWS_REGION \ + --tags "splunkit_environment_type:non-prd,splunkit_data_classification:private" +``` + +> `g5.4xlarge`インスタンスタイプを指定していることに注意してください。これには、このワークショップの後半で使用するNVIDIA GPUが含まれています。このインスタンスタイプは比較的高価で、執筆時点で1時間あたり約$1.64であり、2つのレプリカをリクエストしているため、クラスターの実行時間に注意してください。コストはすぐに蓄積されます。 + +クラスターの準備ができたかどうかを確認するには、以下を実行します: + +``` bash +rosa describe cluster -c $CLUSTER_NAME +``` + +クラスターのインストールログを監視するには、以下を実行します: + +``` bash +rosa logs install -c $CLUSTER_NAME --watch +``` + +## OpenShiftクラスターへの接続 + +以下のコマンドを使用して、oc CLIをOpenShiftクラスターに接続します: + +> 注意: `rosa describe cluster -c $CLUSTER_NAME`コマンドを実行し、結果のAPI Server URLを以下のコマンドに代入してから実行してください。例えば、サーバー名は`https://api.rosa-test.aaa.bb.openshiftapps.com:443`のようになります。 + +``` bash + oc login -u cluster-admin +``` + +クラスターに接続したら、ノードが起動して実行されていることを確認します: + +``` bash +oc get nodes + +NAME STATUS ROLES AGE VERSION +ip-10-0-1-184.us-east-2.compute.internal Ready worker 14m v1.31.11 +ip-10-0-1-50.us-east-2.compute.internal Ready worker 20m v1.31.11 +``` diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/1-workshop-setup/4-deploy-nvidia-nim.md b/content/ja/ninja-workshops/14-cisco-ai-pods/1-workshop-setup/4-deploy-nvidia-nim.md new file mode 100644 index 0000000000..012b024d78 --- /dev/null +++ b/content/ja/ninja-workshops/14-cisco-ai-pods/1-workshop-setup/4-deploy-nvidia-nim.md @@ -0,0 +1,329 @@ +--- +title: NVIDIA NIM Operatorのデプロイ +linkTitle: 4. NVIDIA NIM Operatorのデプロイ +weight: 4 +time: 20 minutes +--- + +**NVIDIA GPU Operator** は、Kubernetesクラスター内でGPUをプロビジョニングするために必要なすべてのNVIDIAソフトウェアコンポーネントのデプロイ、設定、管理を自動化するKubernetes Operatorです。 + +**NVIDIA NIM Operator** は、このワークショップで以前作成したOpenShiftクラスターなどのKubernetes環境でLLMをデプロイするために使用されます。 + +このワークショップのセクションでは、OpenShiftクラスターにNVIDIA GPUとNIM Operatorの両方をデプロイするために必要な手順を説明します。 + +## NVIDIA NGCアカウントの作成 + +LLMをダウンロードしてNVIDIA NIM Operatorを使用してデプロイするには、NVIDIA GPU CLOUD (NGC)アカウントが必要です。[こちら](https://ngc.nvidia.com/signin)から登録してアカウントを作成できます。 + +## NVIDIA Developer Programへの登録 + +[NVIDIA Developer Program](https://developer.nvidia.com/)に登録すると、このワークショップの後半でLLMをデプロイするために使用するNVIDIA NIMにアクセスできます。 + +NGCのNVIDIAサブスクリプションリストに`NVIDIA Developer Program`が表示されていることを確認してください: + +![NVIDIAサブスクリプション](../../images/NVIDIA-Subscriptions.png) + +## NGC APIキーの生成 + +NGCウェブサイトにログインしたら、画面右上のユーザーアカウントアイコンをクリックし、**Setup**を選択します。 + +次に、**Generate API Key**をクリックし、手順に従ってください。キーが**NGC Catalog**と**Secrets Manager**サービスに関連付けられていることを確認してください。 + +生成されたキーは安全な場所に保存してください。このワークショップの後半で使用します。 + +NGC APIキーの生成に関する詳細については、[NVIDIAドキュメント](https://docs.nvidia.com/ngc/gpu-cloud/ngc-user-guide/index.html#generating-api-key)を参照してください。 + +## Node Feature Discovery Operatorのインストール + +このセクションの手順は、[CLIを使用したNFD Operatorのインストール](https://docs.redhat.com/en/documentation/openshift_container_platform/4.18/html/specialized_hardware_and_driver_enablement/psap-node-feature-discovery-operator#install-operator-cli_psap-node-feature-discovery-operator)に基づいています。 + +以下のスクリプトを実行して、Node Feature Discovery Operatorをインストールします: + +``` bash +cd nvidia +./install-nfd-operator.sh +``` + +Operatorのデプロイが成功したことを確認するには、以下を実行します: + +{{< tabs >}} +{{% tab title="Script" %}} + +``` bash +oc get pods +``` + +{{% /tab %}} +{{% tab title="Example Output" %}} + +``` bash +NAME READY STATUS RESTARTS AGE +nfd-controller-manager-7f86ccfb58-vgr4x 2/2 Running 0 10m +``` + +{{% /tab %}} +{{< /tabs >}} + +## NodeFeatureDiscovery CRの作成 + +このセクションの手順は、[CLIを使用したNodeFeatureDiscovery CRの作成](https://docs.redhat.com/en/documentation/openshift_container_platform/4.18/html/specialized_hardware_and_driver_enablement/psap-node-feature-discovery-operator#creating-nfd-cr-cli_psap-node-feature-discovery-operator)に基づいています。 + +以下のスクリプトを実行して、Node Feature Discovery CRを作成します: + +``` bash +./create-nfd-cr.sh +``` + +## NVIDIA GPU Operatorのインストール + +このセクションの手順は、[OpenShiftへのNVIDIA GPU Operatorのインストール](https://docs.nvidia.com/datacenter/cloud-native/openshift/latest/install-gpu-ocp.html#installing-the-nvidia-gpu-operator-on-openshift)に基づいています。 + +以下のスクリプトを実行して、NVIDIA GPU Operatorをインストールします: + +``` bash +./install-nvidia-gpu-operator.sh +``` + +インストールプランが作成されるまで待ちます: + +{{< tabs >}} +{{% tab title="Script" %}} + +``` bash +oc get installplan -n nvidia-gpu-operator +``` + +{{% /tab %}} +{{% tab title="Example Output" %}} + +``` bash +NAME CSV APPROVAL APPROVED +install-mmlxq gpu-operator-certified.v25.3.4 Manual false +``` + +{{% /tab %}} +{{< /tabs >}} + +以下のコマンドでインストールプランを承認します: + +{{< tabs >}} +{{% tab title="Script" %}} + +``` bash +INSTALL_PLAN=$(oc get installplan -n nvidia-gpu-operator -oname) +oc patch $INSTALL_PLAN -n nvidia-gpu-operator --type merge --patch '{"spec":{"approved":true }}' +``` + +{{% /tab %}} +{{% tab title="Example Output" %}} + +``` bash +installplan.operators.coreos.com/install-rc9xq patched +``` + +{{% /tab %}} +{{< /tabs >}} + +## クラスターポリシーの作成 + +このセクションの手順は、[CLIを使用したクラスターポリシーの作成](https://docs.nvidia.com/datacenter/cloud-native/openshift/latest/install-gpu-ocp.html#create-the-cluster-policy-using-the-cli)に基づいています。 + +``` bash +./create-cluster-policy.sh +``` + +## NVIDIA GPU Operatorのインストール確認 + +以下のコマンドを使用して、NVIDIA GPU Operatorが正常にインストールされたことを確認します: + +{{< tabs >}} +{{% tab title="Script" %}} + +``` bash +oc get pods,daemonset -n nvidia-gpu-operator +``` + +{{% /tab %}} +{{% tab title="Example Output" %}} + +``` bash +NAME READY STATUS RESTARTS AGE +pod/gpu-feature-discovery-sblkn 1/1 Running 0 5m5s +pod/gpu-feature-discovery-zpt94 1/1 Running 0 4m58s +pod/gpu-operator-6579bc6fdc-cp28l 1/1 Running 0 23m +pod/nvidia-container-toolkit-daemonset-qfcl9 1/1 Running 0 5m5s +pod/nvidia-container-toolkit-daemonset-zbwb6 1/1 Running 0 4m59s +pod/nvidia-cuda-validator-f7tl2 0/1 Completed 0 78s +pod/nvidia-cuda-validator-t7n9g 0/1 Completed 0 71s +pod/nvidia-dcgm-exporter-gk66x 1/1 Running 0 4m59s +pod/nvidia-dcgm-exporter-w8kr8 1/1 Running 2 (52s ago) 5m5s +pod/nvidia-dcgm-lrnzr 1/1 Running 0 4m58s +pod/nvidia-dcgm-tvrdm 1/1 Running 0 5m5s +pod/nvidia-device-plugin-daemonset-d62nk 1/1 Running 0 5m5s +pod/nvidia-device-plugin-daemonset-fnv4j 1/1 Running 0 4m59s +pod/nvidia-driver-daemonset-418.94.202509100653-0-5xbvq 2/2 Running 0 5m48s +pod/nvidia-driver-daemonset-418.94.202509100653-0-hmkdl 2/2 Running 0 5m48s +pod/nvidia-node-status-exporter-2kqwr 1/1 Running 0 5m44s +pod/nvidia-node-status-exporter-n8d9s 1/1 Running 0 5m44s +pod/nvidia-operator-validator-r2nm2 1/1 Running 0 5m5s +pod/nvidia-operator-validator-w2fpn 1/1 Running 0 4m59s + +NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE +daemonset.apps/gpu-feature-discovery 2 2 2 2 2 nvidia.com/gpu.deploy.gpu-feature-discovery=true 5m45s +daemonset.apps/nvidia-container-toolkit-daemonset 2 2 2 2 2 nvidia.com/gpu.deploy.container-toolkit=true 5m48s +daemonset.apps/nvidia-dcgm 2 2 2 2 2 nvidia.com/gpu.deploy.dcgm=true 5m46s +daemonset.apps/nvidia-dcgm-exporter 2 2 2 2 2 nvidia.com/gpu.deploy.dcgm-exporter=true 5m46s +daemonset.apps/nvidia-device-plugin-daemonset 2 2 2 2 2 nvidia.com/gpu.deploy.device-plugin=true 5m47s +daemonset.apps/nvidia-device-plugin-mps-control-daemon 0 0 0 0 0 nvidia.com/gpu.deploy.device-plugin=true,nvidia.com/mps.capable=true 5m47s +daemonset.apps/nvidia-driver-daemonset-418.94.202509100653-0 2 2 2 2 2 feature.node.kubernetes.io/system-os_release.OSTREE_VERSION=418.94.202509100653-0,nvidia.com/gpu.deploy.driver=true 5m48s +daemonset.apps/nvidia-mig-manager 0 0 0 0 0 nvidia.com/gpu.deploy.mig-manager=true 5m45s +daemonset.apps/nvidia-node-status-exporter 2 2 2 2 2 nvidia.com/gpu.deploy.node-status-exporter=true 5m44s +daemonset.apps/nvidia-operator-validator 2 2 2 2 2 nvidia.com/gpu.deploy.operator-validator=true 5m48s +``` + +{{% /tab %}} +{{< /tabs >}} + +## Operator SDKのインストール + +このセクションの手順は、[GitHubリリースからのインストール](https://sdk.operatorframework.io/docs/installation/#install-from-github-release)に基づいています。 + +### リリースバイナリのダウンロード + +プラットフォーム情報を設定します: + +``` bash +export ARCH=$(case $(uname -m) in x86_64) echo -n amd64 ;; aarch64) echo -n arm64 ;; *) echo -n $(uname -m) ;; esac) +export OS=$(uname | awk '{print tolower($0)}') +``` + +お使いのプラットフォーム用のバイナリをダウンロードします: + +``` bash +export OPERATOR_SDK_DL_URL=https://github.com/operator-framework/operator-sdk/releases/download/v1.41.1 +curl -LO ${OPERATOR_SDK_DL_URL}/operator-sdk_${OS}_${ARCH} +``` + +### ダウンロードしたバイナリの検証 + +keyserver.ubuntu.comからoperator-sdkリリースのGPGキーをインポートします: + +``` bash +gpg --keyserver keyserver.ubuntu.com --recv-keys 052996E2A20B5C7E +``` + +チェックサムファイルとその署名をダウンロードし、署名を検証します: + +``` bash +curl -LO ${OPERATOR_SDK_DL_URL}/checksums.txt +curl -LO ${OPERATOR_SDK_DL_URL}/checksums.txt.asc +gpg -u "Operator SDK (release) " --verify checksums.txt.asc +``` + +以下のような出力が表示されるはずです: + +``` bash +gpg: assuming signed data in 'checksums.txt' +gpg: Signature made Fri 30 Oct 2020 12:15:15 PM PDT +gpg: using RSA key ADE83605E945FA5A1BD8639C59E5B47624962185 +gpg: Good signature from "Operator SDK (release) " [ultimate] +``` + +チェックサムが一致することを確認します: + +``` bash +grep operator-sdk_${OS}_${ARCH} checksums.txt | sha256sum -c - +``` + +以下のような出力が表示されるはずです: + +``` bash +operator-sdk_linux_amd64: OK +``` + +### リリースバイナリをPATHにインストールする + +``` bash +chmod +x operator-sdk_${OS}_${ARCH} && sudo mv operator-sdk_${OS}_${ARCH} /usr/local/bin/operator-sdk +``` + +## NGC CLIのインストール + +このセクションの手順は、[NGC CLIインストール](https://org.ngc.nvidia.com/setup/installers/cli)に基づいています。 + +Download CLIをクリックしてバイナリを含むzipファイルをダウンロードし、権限のあるディレクトリにzipファイルを転送してから解凍してバイナリを実行します。また、実行権限のあるディレクトリに移動し、以下のコマンドを実行することで、コマンドラインからダウンロード、解凍、インストールを行うこともできます: + +``` bash +wget --content-disposition https://api.ngc.nvidia.com/v2/resources/nvidia/ngc-apps/ngc_cli/versions/4.3.0/files/ngccli_linux.zip -O ngccli_linux.zip && unzip ngccli_linux.zip +``` + +ダウンロード中にファイルが破損していないことを確認するために、バイナリのmd5ハッシュを確認します: + +``` bash +find ngc-cli/ -type f -exec md5sum {} + | LC_ALL=C sort | md5sum -c ngc-cli.md5 +``` + +ダウンロード中にファイルが破損していないことを確認するために、バイナリのSHA256ハッシュを確認します。以下のコマンドを実行します: + +``` bash +sha256sum ngccli_linux.zip +``` + +リソースのリリースノートにも記載されている以下の値と比較してください: + +``` bash +5f01eff85a66c895002f3c87db2933c462f3b86e461e60d515370f647b4ffc21 +``` + +値を確認した後、NGC CLIバイナリを実行可能にし、現在のディレクトリをパスに追加します: + +``` bash +chmod u+x ngc-cli/ngc +echo "export PATH=\"\$PATH:$(pwd)/ngc-cli\"" >> ~/.bash_profile && source ~/.bash_profile +``` + +コマンドを実行できるように、NGC CLIを設定する必要があります。 + +以下のコマンドを入力し、プロンプトが表示されたらAPIキーを入力してください: + +``` bash +ngc config set +``` + +NGC APIキーを含む環境変数を定義します: + +``` bash +export NGC_API_KEY= +``` + +## NVIDIA NIM Operatorのインストール + +このセクションの手順は、[operator-sdkを使用したRed Hat OpenShiftへのNIM Operatorのインストール(開発専用)](https://docs.nvidia.com/nim-operator/latest/install.html#installing-nim-operator-on-red-hat-openshift-using-operator-sdk-for-development-only)に基づいています。 + +以下のスクリプトを実行して、NIM Operatorをインストールします: + +``` bash +./install-nim-operator.sh +``` + +コントローラーPodが実行されていることを確認します: + +{{< tabs >}} +{{% tab title="Script" %}} + +``` bash +oc get pods -n nvidia-nim-operator +``` + +{{% /tab %}} +{{% tab title="Example Output" %}} + +``` bash +NAME READY STATUS RESTARTS AGE +ec60a4439c710b89fc2582f5384382b4241f9aee62bb3182b8d128e69dx54dc 0/1 Completed 0 61s +ghcr-io-nvidia-k8s-nim-operator-bundle-latest-main 1/1 Running 0 71s +k8s-nim-operator-86d478b55c-w5cf5 1/1 Running 0 50s +``` + +{{% /tab %}} +{{< /tabs >}} diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/1-workshop-setup/5-deploy-llm.md b/content/ja/ninja-workshops/14-cisco-ai-pods/1-workshop-setup/5-deploy-llm.md new file mode 100644 index 0000000000..905127b408 --- /dev/null +++ b/content/ja/ninja-workshops/14-cisco-ai-pods/1-workshop-setup/5-deploy-llm.md @@ -0,0 +1,247 @@ +--- +title: LLMのデプロイ +linkTitle: 5. LLMのデプロイ +weight: 5 +time: 20 minutes +--- + +このセクションでは、NVIDIA NIM Operatorを使用して、2つのLarge Language ModelsをOpenShiftクラスターにデプロイします。 + +## Namespaceの作成 + +``` bash +oc create namespace nim-service +``` + +## NGC APIキーを使用したSecretの追加 + +NVIDIA NGCからコンテナイメージをダウンロードするためのDockerレジストリSecretを追加します: + +``` bash +oc create secret -n nim-service docker-registry ngc-secret \ + --docker-server=nvcr.io \ + --docker-username='$oauthtoken' \ + --docker-password=$NGC_API_KEY +``` + +モデルプーラーコンテナがNVIDIA NGCからモデルをダウンロードするために使用する汎用Secretを追加します: + +``` bash +oc create secret -n nim-service generic ngc-api-secret \ + --from-literal=NGC_API_KEY=$NGC_API_KEY +``` + +## LLMのデプロイ + +以下のコマンドを実行して、NIMCacheとNIMServiceを作成します: + +``` bash +oc apply -n nim-service -f nvidia-llm.yaml +``` + +Persistent Volumeが作成され、Persistent Volume Claimが正常にバインドされたことを確認します: + +> 注意: これには数分かかる場合があります + +{{< tabs >}} +{{% tab title="Script" %}} + +``` bash +oc get pv,pvc -n nim-service +``` + +{{% /tab %}} +{{% tab title="Example Output" %}} + +``` bash +NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE +persistentvolume/pvc-1af12c04-29ad-497f-b018-7d9a3aea3019 100Gi RWO Delete Bound openshift-monitoring/prometheus-data-prometheus-k8s-1 gp3-csi 4h15m +persistentvolume/pvc-9c389d79-13fb-4169-9d99-a77efd6e7919 100Gi RWO Delete Bound openshift-monitoring/prometheus-data-prometheus-k8s-0 gp3-csi 4h15m +persistentvolume/pvc-a603b8a7-1445-4b03-945a-3ed68338834c 50Gi RWO Delete Bound nim-service/meta-llama-3-2-1b-instruct-pvc gp3-csi 114s + +NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE +persistentvolumeclaim/meta-llama-3-2-1b-instruct-pvc Bound pvc-a603b8a7-1445-4b03-945a-3ed68338834c 50Gi RWO gp3-csi 7m8s +``` + +{{% /tab %}} +{{< /tabs >}} + +NIMCacheがReadyであることを確認します: + +{{< tabs >}} +{{% tab title="Script" %}} + +``` bash +oc get nimcache.apps.nvidia.com -n nim-service +``` + +{{% /tab %}} +{{% tab title="Example Output" %}} + +``` bash +NAME STATUS PVC AGE +meta-llama-3-2-1b-instruct Ready meta-llama-3-2-1b-instruct-pvc 9m50s +``` + +{{% /tab %}} +{{< /tabs >}} + +NIMServiceがReadyであることを確認します: + +{{< tabs >}} +{{% tab title="Script" %}} + +``` bash +oc get nimservices.apps.nvidia.com -n nim-service +``` + +{{% /tab %}} +{{% tab title="Example Output" %}} + +``` bash +NAME STATUS AGE +meta-llama-3-2-1b-instruct Ready 11m +``` + +{{% /tab %}} +{{< /tabs >}} + +## LLMのテスト + +LLMが期待通りに動作していることを確認しましょう。 + +curlコマンドにアクセスできるPodを起動します: + +``` bash +oc run --rm -it -n default curl --image=curlimages/curl:latest -- sh +``` + +次に、以下のコマンドを実行してLLMにプロンプトを送信します: + +{{< tabs >}} +{{% tab title="Script" %}} + +``` bash +curl -X "POST" \ + 'http://meta-llama-3-2-1b-instruct.nim-service:8000/v1/chat/completions' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -d '{ + "model": "meta/llama-3.2-1b-instruct", + "messages": [ + { + "content":"What is the capital of Canada?", + "role": "user" + }], + "top_p": 1, + "n": 1, + "max_tokens": 1024, + "stream": false, + "frequency_penalty": 0.0, + "stop": ["STOP"] + }' +``` + +{{% /tab %}} +{{% tab title="Example Output" %}} + +``` bash +{ + "id": "chatcmpl-2ccfcd75a0214518aab0ef0375f8ca21", + "object": "chat.completion", + "created": 1758919002, + "model": "meta/llama-3.2-1b-instruct", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "reasoning_content": null, + "content": "The capital of Canada is Ottawa.", + "tool_calls": [] + }, + "logprobs": null, + "finish_reason": "stop", + "stop_reason": null + } + ], + "usage": { + "prompt_tokens": 42, + "total_tokens": 50, + "completion_tokens": 8, + "prompt_tokens_details": null + }, + "prompt_logprobs": null +} +``` + +{{% /tab %}} +{{< /tabs >}} + +## Embeddingsモデルのデプロイ + +また、クラスターに[embeddingsモデル](https://build.nvidia.com/nvidia/llama-3_2-nv-embedqa-1b-v2/deploy)をデプロイします。これは、このワークショップの後半でRetrieval Augmented Generation (RAG)を実装するために使用されます。 + +以下のコマンドを実行して、embeddingsモデルをデプロイします: + +``` bash +oc apply -n nim-service -f nvidia-embeddings.yaml +``` + +NIMServiceがReadyであることを確認します: + +{{< tabs >}} +{{% tab title="Script" %}} + +``` bash +oc get nimservices.apps.nvidia.com llama-32-nv-embedqa-1b-v2 -n nim-service +``` + +{{% /tab %}} +{{% tab title="Example Output" %}} + +``` bash +NAME STATUS AGE +llama-32-nv-embedqa-1b-v2 Ready 82s +``` + +{{% /tab %}} +{{< /tabs >}} + +## Embeddingsモデルのテスト + +embeddingsモデルが期待通りに動作していることを確認しましょう。 + +curlコマンドにアクセスできるPodを起動します: + +``` bash +oc run --rm -it -n default curl --image=curlimages/curl:latest -- sh +``` + +次に、以下のコマンドを実行してLLMにプロンプトを送信します: + +{{< tabs >}} +{{% tab title="Script" %}} + +``` bash + curl -X POST http://llama-32-nv-embedqa-1b-v2.nim-service:8000/v1/embeddings \ + -H 'Accept: application/json' \ + -H "Content-Type: application/json" \ + -d '{ + "input": ["What is the capital of France?"], + "model": "nvidia/llama-3.2-nv-embedqa-1b-v2", + "input_type": "query", + "encoding_format": "float", + "truncate": "NONE" + }' +``` + +{{% /tab %}} +{{% tab title="Example Output" %}} + +``` bash +{"object":"list","data":[{"index":0,"embedding":[-0.016632080078125,0.041259765625,-0.0156707763671875,0.032379150390625,0.045074462890625,0.0169830322265625,-0.03546142578125,-0.0003402233123779297,-0.038909912109375,-0.0023651123046875,-0.0001741647720336914,-0.01377105712890625,-0.01200103759765625,-0.00659942626953125,0.002536773681640625,0.0185394287109375,0.01546478271484375,0.0216827392578125,0.0139923095703125,-0.0121612548828125,-0.015869140625,0.005313873291015625,-0.020599365234375,0.02984619140625,-0.031982421875,0.0005679130554199219,-0.021697998046875,-0.0305938720703125,0.027618408203125,0.005340576171875,0.011993408203125,0.0135345458984375,-0.015625,0.036651611328125,-0.0210113525390625,0.0033321380615234375,0.033172607421875,-0.009552001953125,0.0226287841796875,0.01448822021484375,-0.05474853515625,-0.00861358642578125,-0.01513671875,-0.028656005859375,-0.0095977783203125,-0.025146484375,-0.0352783203125,0.03106689453125,-0.00726318359375,0.0157623291015625,0.01319122314453125,-0.005218505859375,-0.0013561248779296875,0.01277923583984375,-0.007328033447265625,0.01486968994140625,-0.05413818359375,-0.022125244140625,-0.015869140625,-0.00917816162109375,0.0186309814453125,-0.00814056396484375,-0.04730224609375,0.01406097412109375,-0.0248260498046875,0.0094757080078125,0.0309600830078125,0.0196533203125,-0.0270843505859375,-0.01113128662109375,-0.0056915283203125,-0.01154327392578125,0.037750244140625,-0.0028896331787109375,-0.00376129150390625,0.03692626953125,0.020416259765625,0.00200653076171875,0.0396728515625,0.004985809326171875,-0.04425048828125,-0.034820556640625,-0.0102386474609375,0.0218505859375,0.003604888916015625,0.00940704345703125,0.01468658447265625,0.0089111328125,-0.0032196044921875,-0.043243408203125,0.015411376953125,-0.00653839111328125,-0.01128387451171875,-0.052734375,0.032684326171875,-0.0101470947265625,-0.018218994140625,-0.003955841064453125,0.007648468017578125,-0.02044677734375,-0.0285186767578125,0.0153350830078125,0.03692626953125,0.0147247314453125,0.01043701171875,0.0007462501525878906,0.0261077880859375,0.024169921875,-0.040283203125,-0.005828857421875,0.00736236572265625,-0.00909423828125,0.00920867919921875,-0.00243377685546875,-0.03204345703125,-0.0232696533203125,0.01131439208984375,-0.0192413330078125,-0.025482177734375,-0.0267333984375,-0.03350830078125,-0.0008440017700195312,-0.040496826171875,0.0281982421875,-0.03533935546875,-0.0005216598510742188,0.061859130859375,0.0439453125,-0.00656890869140625,0.004627227783203125,-0.05615234375,0.027801513671875,-0.0027790069580078125,-0.011322021484375,-0.00841522216796875,0.027191162109375,-0.0018453598022460938,-0.00560760498046875,0.020263671875,-0.0295867919921875,0.03759765625,-0.00951385498046875,0.014190673828125,-0.039764404296875,-0.0199127197265625,-0.007427215576171875,-0.021392822265625,0.00946807861328125,0.03955078125,0.0015478134155273438,0.0227203369140625,0.020843505859375,-0.00531768798828125,0.0087432861328125,-0.01617431640625,0.002574920654296875,0.0104217529296875,0.01215362548828125,0.00970458984375,0.003803253173828125,0.005451202392578125,-0.001972198486328125,-0.01171875,-0.0216217041015625,0.033355712890625,-0.007137298583984375,0.00890350341796875,-0.01293182373046875,0.0189666748046875,-0.0168609619140625,-0.0153350830078125,0.0113525390625,-0.0123443603515625,0.046905517578125,0.0082244873046875,-0.019500732421875,0.004482269287109375,0.01007080078125,0.0037708282470703125,0.053619384765625,0.0171051025390625,-0.0305023193359375,-0.0240478515625,0.007648468017578125,-0.03973388671875,0.00847625732421875,-0.0207061767578125,-0.025115966796875,0.0168914794921875,0.03619384765625,0.00720977783203125,0.00803375244140625,0.022064208984375,-0.01111602783203125,-0.0024890899658203125,0.0047760009765625,-0.02374267578125,-0.0197296142578125,0.0203704833984375,0.00572967529296875,0.0254058837890625,0.0186920166015625,-0.022796630859375,-0.02191162109375,-0.0182952880859375,-0.00365447998046875,-0.01262664794921875,-0.0128326416015625,0.0157318115234375,-0.004596710205078125,0.033843994140625,0.01313018798828125,0.00656890869140625,0.0004596710205078125,-0.020355224609375,0.03411865234375,0.00034546852111816406,0.0205230712890625,0.02960205078125,-0.0157318115234375,-0.051483154296875,-0.0255584716796875,0.039825439453125,0.0258636474609375,0.038238525390625,-0.03424072265625,0.0188140869140625,0.03216552734375,-0.048126220703125,-0.0227203369140625,0.0032215118408203125,-0.0156097412109375,-0.003170013427734375,0.01444244384765625,-0.0232086181640625,0.002437591552734375,0.012451171875,-0.0066680908203125,0.01158905029296875,0.026397705078125,-0.00373077392578125,0.008087158203125,-0.00798797607421875,-0.0173187255859375,-0.013580322265625,0.033660888671875,-0.0028629302978515625,0.046295166015625,0.0299530029296875,-0.0159759521484375,-0.005580902099609375,0.0015277862548828125,0.01123046875,0.0031585693359375,-0.01151275634765625,0.00814056396484375,-0.0369873046875,0.0267181396484375,0.0013856887817382812,0.028656005859375,0.01409149169921875,0.035614013671875,-0.01189422607421875,-0.01190185546875,-0.053619384765625,0.037139892578125,-0.02288818359375,-0.024139404296875,0.01678466796875,-0.01020050048828125,-0.0222930908203125,-0.01059722900390625,0.044525146484375,0.006526947021484375,0.006084442138671875,-0.0015411376953125,-0.040618896484375,0.027801513671875,-0.00839996337890625,-0.01126861572265625,-0.01000213623046875,0.01197052001953125,-0.01062774658203125,-0.0155487060546875,0.011688232421875,0.01044464111328125,-0.0528564453125,0.031005859375,-0.0007734298706054688,8.52346420288086e-6,-0.00894927978515625,-0.005870819091796875,0.04254150390625,-0.03216552734375,0.0215911865234375,-0.01029205322265625,-0.01015472412109375,-0.036285400390625,0.0111083984375,0.0018520355224609375,-0.01177215576171875,0.01256561279296875,-0.004901885986328125,-0.006866455078125,-0.0084381103515625,-0.01160430908203125,-0.044891357421875,0.00632476806640625,0.0015001296997070312,-0.0016727447509765625,-0.013031005859375,-0.01404571533203125,-0.035888671875,-0.013397216796875,-0.0006346702575683594,0.00981903076171875,-0.0134735107421875,-0.022705078125,-0.02606201171875,-0.018402099609375,-0.046966552734375,-0.012542724609375,0.0183563232421875,0.0179901123046875,-0.0225067138671875,0.02801513671875,-0.032379150390625,-0.0079803466796875,0.0070953369140625,0.017333984375,0.026611328125,-0.03778076171875,-0.023590087890625,-0.005245208740234375,0.024383544921875,-0.02105712890625,0.020843505859375,0.033905029296875,0.0225372314453125,0.00942230224609375,0.0005245208740234375,-0.0284881591796875,0.01499176025390625,-0.0124664306640625,-0.0267333984375,0.023040771484375,0.01265716552734375,-0.0026264190673828125,0.00955963134765625,-0.0036773681640625,-0.0394287109375,0.015716552734375,-0.01300048828125,0.0187225341796875,-0.01275634765625,-0.0273590087890625,0.045562744140625,-0.00913238525390625,-0.004268646240234375,-0.005107879638671875,-0.026702880859375,0.0015077590942382812,-0.02862548828125,0.0003228187561035156,0.0099334716796875,-0.0305328369140625,-0.0362548828125,0.0114898681640625,-0.00025653839111328125,-0.0022735595703125,0.0106201171875,0.01090240478515625,0.00992584228515625,0.00998687744140625,-0.00634002685546875,0.00711822509765625,-0.02337646484375,-0.01367950439453125,-0.006389617919921875,-0.006000518798828125,0.01027679443359375,-0.00838470458984375,0.004673004150390625,0.002841949462890625,0.014404296875,-0.02838134765625,0.023834228515625,-0.00823974609375,-0.038970947265625,0.003002166748046875,-0.04510498046875,-0.0265655517578125,-0.0036182403564453125,-0.046661376953125,-0.01062774658203125,-0.05804443359375,-0.02117919921875,-0.029815673828125,0.036712646484375,-0.0069122314453125,0.0079345703125,0.0164794921875,-0.007534027099609375,-0.01111602783203125,0.0135650634765625,-0.0017242431640625,0.009490966796875,-0.0222320556640625,0.043853759765625,0.054718017578125,-0.003208160400390625,-0.004199981689453125,0.01529693603515625,-0.007190704345703125,0.00637054443359375,-0.004749298095703125,-0.0217132568359375,-0.0093841552734375,-0.0335693359375,-0.0017490386962890625,0.0081939697265625,0.0247802734375,0.0148468017578125,0.026763916015625,0.002079010009765625,0.0292816162109375,0.04705810546875,0.02166748046875,-0.0120697021484375,0.01050567626953125,0.0131988525390625,0.0169525146484375,0.0291595458984375,-0.00270843505859375,-0.0095062255859375,-0.0211944580078125,-0.035980224609375,0.006805419921875,0.002735137939453125,0.043731689453125,-0.01515960693359375,0.0010576248168945312,-0.00913238525390625,0.001293182373046875,-0.00027489662170410156,-0.00868988037109375,0.007389068603515625,0.0023212432861328125,-0.01528167724609375,0.017852783203125,-0.03643798828125,0.045623779296875,-0.0030364990234375,-0.0271453857421875,0.0268402099609375,-0.0033473968505859375,0.0186920166015625,-0.0225067138671875,0.0125732421875,-0.01386260986328125,-0.0218658447265625,0.01248931884765625,0.025848388671875,0.021453857421875,0.008056640625,0.025421142578125,0.01224517822265625,0.0208740234375,-0.003856658935546875,-0.021209716796875,-0.00545501708984375,-0.0254058837890625,0.04388427734375,0.0204315185546875,-0.0072174072265625,-0.0110626220703125,0.0007481575012207031,-0.0022411346435546875,-0.046905517578125,-0.028472900390625,0.0196533203125,0.014129638671875,0.0130615234375,-0.01288604736328125,-0.03607177734375,-0.01568603515625,-0.00814056396484375,-0.01499176025390625,0.0112152099609375,-0.00360870361328125,0.024688720703125,-0.0189361572265625,-0.007122039794921875,0.00634002685546875,-0.00626373291015625,-0.000766754150390625,0.0193939208984375,-0.002841949462890625,0.041717529296875,-0.00016701221466064453,-0.043365478515625,-0.023773193359375,0.0283660888671875,0.0245208740234375,-0.055450439453125,0.01096343994140625,-0.0180511474609375,0.0189056396484375,0.0164947509765625,-0.033111572265625,0.0262603759765625,0.0294189453125,0.00084686279296875,0.0279388427734375,-0.003910064697265625,0.002910614013671875,0.00890350341796875,-0.033843994140625,0.004856109619140625,0.00033974647521972656,-0.056549072265625,-0.0110626220703125,-0.0178375244140625,0.006381988525390625,0.018798828125,0.0205230712890625,-0.05609130859375,-0.01023101806640625,-0.001201629638671875,-0.02227783203125,0.01910400390625,0.006931304931640625,0.0017032623291015625,-0.01849365234375,-0.0249786376953125,-0.0176849365234375,0.007389068603515625,-0.01025390625,0.036407470703125,-0.0275421142578125,0.021514892578125,-0.0198822021484375,-0.0189056396484375,-0.0156402587890625,0.01025390625,0.02197265625,-0.007740020751953125,-0.034515380859375,0.0011262893676757812,0.024566650390625,0.0229339599609375,0.004810333251953125,-0.01171875,-0.0238189697265625,0.021392822265625,0.0008301734924316406,0.019378662109375,-0.00894927978515625,-0.01496124267578125,0.01558685302734375,-0.0229339599609375,0.00020587444305419922,-0.0202178955078125,0.0298919677734375,0.00969696044921875,-0.0011949539184570312,-0.007144927978515625,-0.0198211669921875,0.0030422210693359375,-0.037811279296875,-0.039306640625,-0.027587890625,-0.0274810791015625,0.025390625,-0.0333251953125,-0.0062103271484375,-0.016876220703125,0.002651214599609375,-0.0020275115966796875,0.042144775390625,0.013092041015625,0.01690673828125,0.0268707275390625,0.0082244873046875,0.066650390625,0.0053253173828125,0.08526611328125,-0.0146331787109375,-0.0261688232421875,-0.04266357421875,0.004474639892578125,-0.005229949951171875,-0.01806640625,0.00479888916015625,0.00183868408203125,-0.01030731201171875,0.0028285980224609375,-0.0239410400390625,0.0166778564453125,0.0006723403930664062,-0.00923919677734375,-0.00504302978515625,0.0159759521484375,-0.0248260498046875,0.03179931640625,-0.01517486572265625,-0.0006771087646484375,-0.0117645263671875,0.016510009765625,0.00168609619140625,-0.016387939453125,0.0421142578125,-0.00951385498046875,-0.00388336181640625,-0.04559326171875,-0.0194091796875,0.043853759765625,-0.007541656494140625,0.0275421142578125,-0.005645751953125,0.003803253173828125,-0.01438140869140625,0.018218994140625,-0.006381988525390625,-0.012664794921875,-0.011962890625,0.035186767578125,0.0225067138671875,-0.005321502685546875,-0.007659912109375,0.0022792816162109375,-0.00830078125,-0.0092926025390625,-0.0278778076171875,-0.00011402368545532227,0.0027523040771484375,0.0082855224609375,0.0175933837890625,0.0029430389404296875,0.0721435546875,0.01525115966796875,-0.059967041015625,-0.0626220703125,0.0222625732421875,-0.05810546875,-0.01192474365234375,-0.0056610107421875,0.0173492431640625,-0.0008497238159179688,-0.01050567626953125,-0.01558685302734375,0.0032196044921875,0.00745391845703125,-0.05029296875,0.00310516357421875,0.0333251953125,-0.01166534423828125,-0.0347900390625,-0.00830078125,0.01305389404296875,0.01030731201171875,0.017730712890625,-0.007415771484375,-0.00287628173828125,0.01197052001953125,-0.004016876220703125,-0.038421630859375,0.000743865966796875,-0.006237030029296875,0.0511474609375,-0.003826141357421875,-0.00838470458984375,-0.007572174072265625,0.00522613525390625,0.01514434814453125,0.00557708740234375,-0.035186767578125,0.0077056884765625,-0.0330810546875,-0.0043487548828125,-0.0307464599609375,-0.00670623779296875,0.01395416259765625,-0.0247039794921875,-0.03399658203125,0.0176849365234375,-0.00827789306640625,-0.0132293701171875,0.011016845703125,0.00740814208984375,-0.022735595703125,0.01110076904296875,-0.0127105712890625,-0.01074981689453125,-0.04150390625,-0.05438232421875,-0.0014743804931640625,-0.00507354736328125,-0.05291748046875,-0.0126800537109375,0.032135009765625,0.0266571044921875,-0.0240020751953125,-0.0033702850341796875,0.0021076202392578125,0.0206756591796875,0.01454925537109375,-0.00954437255859375,0.0178680419921875,0.004734039306640625,-0.0014028549194335938,0.0109710693359375,-0.0200042724609375,-0.030029296875,0.04022216796875,-0.0190887451171875,0.028594970703125,0.0205841064453125,-0.0028095245361328125,0.0024242401123046875,-0.0151214599609375,0.0025386810302734375,-0.006633758544921875,0.01265716552734375,-0.019073486328125,0.0030384063720703125,-0.024871826171875,-0.01148223876953125,0.00914764404296875,-0.004367828369140625,-0.0186920166015625,0.021514892578125,-0.027435302734375,0.00736236572265625,0.037872314453125,-0.00222015380859375,0.0041351318359375,-0.0224151611328125,-0.0255279541015625,0.03271484375,-0.0242919921875,0.0097198486328125,-0.02008056640625,-0.01003265380859375,-0.0215606689453125,-0.00974273681640625,-0.0428466796875,-0.0343017578125,-0.0006017684936523438,-0.0230865478515625,0.020782470703125,0.01134490966796875,0.0107421875,-0.0165863037109375,-0.0043487548828125,0.0165252685546875,0.0276947021484375,0.0051116943359375,0.03497314453125,0.0288848876953125,0.0205230712890625,-0.0099029541015625,0.0014505386352539062,-0.045074462890625,-0.0226898193359375,0.002422332763671875,0.0013151168823242188,-0.0031642913818359375,-0.0247344970703125,0.013885498046875,-0.002410888671875,0.046051025390625,0.0328369140625,0.04193115234375,0.006710052490234375,-0.004138946533203125,-0.031768798828125,0.024658203125,0.00417327880859375,-0.01116943359375,0.0097198486328125,-0.021270751953125,0.0285491943359375,0.02581787109375,0.0167083740234375,0.0206298828125,0.009185791015625,0.00794219970703125,-0.0022792816162109375,0.004337310791015625,-0.01166534423828125,-0.01227569580078125,0.00905609130859375,0.0156707763671875,-0.04217529296875,0.025054931640625,-0.01058197021484375,0.0171356201171875,0.001369476318359375,0.003917694091796875,-0.00817108154296875,0.026123046875,0.0200042724609375,-0.0294189453125,0.032440185546875,-0.0297393798828125,-0.0109100341796875,-0.00856781005859375,0.0034465789794921875,0.0186920166015625,0.0199737548828125,-0.03558349609375,-0.025146484375,-0.009307861328125,0.0081024169921875,0.0131378173828125,0.0117340087890625,0.0063018798828125,0.0000546574592590332,0.01898193359375,-0.0167694091796875,0.01666259765625,0.0374755859375,0.02374267578125,-0.0103912353515625,0.01207733154296875,-0.032989501953125,-0.004108428955078125,-0.0026798248291015625,0.01166534423828125,0.0257568359375,-0.056732177734375,0.0282745361328125,-0.0034351348876953125,-0.007415771484375,0.0081634521484375,0.029998779296875,0.0019369125366210938,-0.0014734268188476562,0.004573822021484375,0.04296875,0.025665283203125,-0.0121307373046875,0.029266357421875,0.016815185546875,-0.002536773681640625,-0.015045166015625,-0.0211334228515625,0.0020351409912109375,0.008087158203125,-0.004528045654296875,-0.0172882080078125,0.023712158203125,0.0305633544921875,0.0213470458984375,-0.0154266357421875,-0.035675048828125,0.0002543926239013672,0.01149749755859375,0.00833892822265625,0.01506805419921875,0.019500732421875,-0.01265716552734375,0.01947021484375,0.0242767333984375,-0.017486572265625,-0.01294708251953125,-0.012603759765625,-0.0093994140625,-0.00226593017578125,0.020355224609375,-0.0369873046875,0.0166168212890625,0.034332275390625,-0.0240631103515625,-0.03558349609375,0.036376953125,-0.009246826171875,0.0041656494140625,0.0439453125,-0.023284912109375,0.004749298095703125,-0.0232391357421875,-0.0105743408203125,-0.01030731201171875,-0.01318359375,0.0220184326171875,0.005840301513671875,0.0217437744140625,-0.01007080078125,0.01398468017578125,0.0019063949584960938,-0.011383056640625,-0.00424957275390625,-0.0208282470703125,0.012237548828125,0.01526641845703125,0.00959014892578125,0.027191162109375,0.001735687255859375,0.0177154541015625,-0.01139068603515625,0.0218963623046875,0.03814697265625,-0.018951416015625,0.011016845703125,-0.01287078857421875,0.046875,-0.007415771484375,0.01198577880859375,-0.02532958984375,0.00311279296875,0.018524169921875,0.005390167236328125,-0.01435089111328125,0.0018949508666992188,0.0421142578125,0.0045928955078125,-0.006099700927734375,0.007049560546875,0.00502777099609375,-0.00963592529296875,0.00894927978515625,-0.034515380859375,-0.0035114288330078125,-0.0142974853515625,-0.034515380859375,-0.02142333984375,0.017608642578125,-0.014892578125,-0.01244354248046875,-0.017486572265625,0.00013899803161621094,0.00011283159255981445,-0.00756072998046875,-0.0132293701171875,0.0108489990234375,0.0305328369140625,-0.001163482666015625,-0.002880096435546875,-0.0007386207580566406,0.00370025634765625,0.00797271728515625,-0.010528564453125,-0.0073089599609375,-0.0279693603515625,-0.01343536376953125,-0.005908966064453125,-0.0003764629364013672,0.053955078125,0.0237884521484375,-0.053497314453125,-0.01165771484375,-0.037628173828125,0.0099639892578125,-0.02386474609375,0.032958984375,0.0239715576171875,0.0016231536865234375,-0.033111572265625,0.0007448196411132812,0.0245819091796875,-0.0094757080078125,-0.03131103515625,-0.02459716796875,0.021453857421875,0.01398468017578125,-0.0017442703247070312,0.054107666015625,0.0193328857421875,0.0057373046875,0.03485107421875,0.0258636474609375,0.004131317138671875,-0.02239990234375,-0.002368927001953125,0.01102447509765625,-0.017181396484375,0.01454925537109375,-0.0119781494140625,-0.0017871856689453125,-0.0166778564453125,0.008544921875,-0.0135345458984375,-0.03192138671875,0.0030956268310546875,-0.0279083251953125,0.0235595703125,-0.017974853515625,0.0108184814453125,0.0031032562255859375,-0.003093719482421875,-0.014129638671875,0.01361083984375,-0.03619384765625,-0.00826263427734375,0.033477783203125,-0.004150390625,0.0157012939453125,0.0011501312255859375,0.059844970703125,-0.01555633544921875,0.031219482421875,0.0177001953125,-0.0307464599609375,0.01264190673828125,0.0291290283203125,0.01045989990234375,-0.0097503662109375,0.01226806640625,0.00598907470703125,0.01849365234375,-0.02801513671875,-0.0112152099609375,-0.006011962890625,-0.006664276123046875,0.00928497314453125,0.0002186298370361328,-0.0012874603271484375,-0.0233001708984375,-0.0065155029296875,-0.0220947265625,-0.00310516357421875,0.049041748046875,-0.04925537109375,0.0262451171875,-0.0028095245361328125,-0.0091400146484375,0.0240631103515625,-0.002864837646484375,0.0120391845703125,-0.021942138671875,0.0347900390625,0.023834228515625,-0.0134429931640625,0.00028228759765625,0.0277557373046875,0.03082275390625,0.006237030029296875,-0.015350341796875,-0.005039215087890625,0.0145416259765625,0.01226806640625,-0.01474761962890625,-0.004917144775390625,-0.005733489990234375,-0.010986328125,0.0223236083984375,0.0224609375,-0.035736083984375,-0.008544921875,-0.0009150505065917969,-0.0119476318359375,0.0178070068359375,-0.005352020263671875,-0.01558685302734375,-0.0208740234375,-0.0160675048828125,0.0069122314453125,-0.0357666015625,0.01319122314453125,-0.00457000732421875,0.00502777099609375,-0.0006170272827148438,0.0032196044921875,-0.008209228515625,0.0026721954345703125,-0.022705078125,0.01666259765625,-0.0217132568359375,-0.024017333984375,-0.00527191162109375,0.0005908012390136719,0.0028228759765625,-0.0205841064453125,-0.05108642578125,0.02947998046875,-0.00861358642578125,-0.035552978515625,-0.0090484619140625,-0.044464111328125,-0.0284881591796875,0.004901885986328125,0.00669097900390625,0.020538330078125,0.01218414306640625,0.01477813720703125,0.0011930465698242188,0.027587890625,-0.037811279296875,0.0273284912109375,-0.0006680488586425781,0.0179901123046875,0.047393798828125,0.033355712890625,-0.018646240234375,-0.031585693359375,-0.0190887451171875,0.0059051513671875,-0.005916595458984375,0.0247802734375,0.00881195068359375,-0.004108428955078125,-0.0091552734375,0.021697998046875,-0.0207061767578125,0.0207977294921875,-0.048095703125,-0.01544189453125,0.015533447265625,0.0228424072265625,0.0255126953125,-0.0172119140625,-0.0450439453125,0.0005936622619628906,0.0027103424072265625,0.03704833984375,-0.018218994140625,-0.00972747802734375,0.0067901611328125,-0.000598907470703125,-0.00482940673828125,-0.00786590576171875,0.0011510848999023438,0.0364990234375,-0.0128631591796875,-0.0198822021484375,0.0000896453857421875,-0.022735595703125,0.01479339599609375,-0.0034351348876953125,0.0120086669921875,0.0070037841796875,-0.01971435546875,0.04010009765625,0.0034389495849609375,-0.0109100341796875,0.01395416259765625,0.03509521484375,0.01096343994140625,-0.0209808349609375,-0.0009293556213378906,-0.00043487548828125,0.005519866943359375,-0.016448974609375,0.032470703125,0.0284881591796875,0.0144195556640625,-0.0307464599609375,0.0217437744140625,-0.0303497314453125,-0.05926513671875,0.01444244384765625,-0.01264190673828125,0.040313720703125,-0.012603759765625,-0.0178375244140625,-0.04339599609375,0.01222991943359375,-0.0025005340576171875,-0.010406494140625,-0.003086090087890625,-0.0214385986328125,0.01045989990234375,0.005886077880859375,-0.0175933837890625,0.04840087890625,-0.0168914794921875,0.01800537109375,-0.01354217529296875,-0.01383209228515625,0.04083251953125,0.034271240234375,0.021514892578125,0.04022216796875,0.0231781005859375,-0.01110076904296875,-0.0224151611328125,0.0021991729736328125,-0.01206207275390625,-0.01557159423828125,0.0548095703125,0.02618408203125,0.023956298828125,-0.00994110107421875,-0.004299163818359375,0.007030487060546875,-0.0113372802734375,0.0140228271484375,-0.01084136962890625,0.010711669921875,-0.0236358642578125,0.01776123046875,0.04461669921875,-0.0460205078125,-0.012969970703125,0.0078277587890625,-0.040313720703125,-0.004344940185546875,-0.00681304931640625,-0.00937652587890625,0.00601959228515625,-0.0086669921875,0.038238525390625,-0.00726318359375,-0.00667572021484375,-0.0282745361328125,-0.01448822021484375,-0.004566192626953125,0.002193450927734375,0.0408935546875,-0.018951416015625,-0.0347900390625,-0.0038661956787109375,0.0011167526245117188,0.00603485107421875,0.004985809326171875,0.004299163818359375,0.009552001953125,-0.04736328125,0.018310546875,0.004238128662109375,0.028839111328125,-0.02349853515625,0.00798797607421875,0.021270751953125,-0.01384735107421875,-0.02392578125,0.03662109375,0.0032825469970703125,0.056182861328125,-0.007129669189453125,-0.0014019012451171875,0.030426025390625,-0.017974853515625,-0.0118560791015625,0.0104827880859375,-0.0132293701171875,0.01959228515625,-0.0006871223449707031,-0.038055419921875,0.03125,0.01332855224609375,0.0675048828125,0.0005002021789550781,0.0117950439453125,0.0179901123046875,-0.0034618377685546875,-0.029205322265625,0.0136871337890625,-0.01409149169921875,-0.020111083984375,-0.06976318359375,-0.03985595703125,-0.020965576171875,0.002532958984375,-0.000797271728515625,0.00029206275939941406,-0.04278564453125,0.01293182373046875,-0.0178375244140625,-0.01496124267578125,-0.0289154052734375,-0.00551605224609375,-0.0135498046875,-0.0019350051879882812,-0.0008111000061035156,0.032958984375,0.005794525146484375,-0.00988006591796875,0.0147247314453125,0.0008878707885742188,-0.0347900390625,0.04827880859375,0.03656005859375,0.0005245208740234375,0.0078887939453125,0.0218048095703125,0.0177764892578125,0.02093505859375,-0.028656005859375,0.0273284912109375,-0.038818359375,0.01300811767578125,0.0174102783203125,0.01216888427734375,-0.0258941650390625,0.028778076171875,-0.024658203125,0.00337982177734375,-0.00594329833984375,-0.00948333740234375,0.036773681640625,-0.006595611572265625,-0.01033782958984375,0.001506805419921875,-0.03656005859375,-0.0239105224609375,0.041229248046875,-0.04071044921875,-0.0152435302734375,0.0151214599609375,0.037994384765625,-0.01058197021484375,-0.01062774658203125,0.002964019775390625,0.0294189453125,0.01041412353515625,0.038299560546875,-0.036163330078125,-0.036346435546875,-0.00850677490234375,-0.0098876953125,-0.051788330078125,0.02398681640625,-0.0219268798828125,0.023406982421875,0.008941650390625,0.010772705078125,-0.0265960693359375,-0.0099639892578125,-0.00727081298828125,0.0234222412109375,0.0023441314697265625,-0.01409912109375,0.01169586181640625,0.0023250579833984375,-0.0189208984375,-0.01013946533203125,-0.01739501953125,-0.0309295654296875,-0.00823974609375,0.029205322265625,0.01111602783203125,-0.01509857177734375,-0.01160430908203125,0.0173187255859375,0.0169830322265625,-0.00464630126953125,0.0253448486328125,0.0095062255859375,-0.0179443359375,0.0223846435546875,-0.0219879150390625,-0.0004260540008544922,-0.025421142578125,-0.007659912109375,-0.01485443115234375,-0.0166168212890625,0.011444091796875,0.0185394287109375,-0.02984619140625,0.061767578125,0.0189971923828125,-0.016693115234375,0.002613067626953125,-0.01242828369140625,0.0262298583984375,0.029388427734375,-0.0711669921875,-0.0263519287109375,0.01184844970703125,0.00977325439453125,-0.0232696533203125,-0.0131072998046875,0.00910186767578125,0.0251617431640625,0.04644775390625,-0.00033926963806152344,0.00894927978515625,0.01216888427734375,-0.00942230224609375,0.01220703125,0.002918243408203125,0.0167694091796875,0.0286865234375,0.01436614990234375,-0.02581787109375,-0.0123138427734375,-0.0143890380859375,0.0200042724609375,-0.020660400390625,-0.017791748046875,-0.006740570068359375,0.02484130859375,-0.028472900390625,-0.0142364501953125,-0.007534027099609375,0.021697998046875,-0.013580322265625,-0.003910064697265625,0.01214599609375,-0.01267242431640625,-0.005466461181640625,0.0239410400390625,0.01348876953125,0.0171661376953125,-0.00982666015625,-0.009613037109375,0.0189208984375,-0.01146697998046875,-0.01364898681640625,-0.021820068359375,-0.017181396484375,0.0097503662109375,-0.0240478515625,0.031829833984375,0.0172271728515625,0.01308441162109375,0.006938934326171875,0.0212249755859375,-0.007843017578125,-0.041839599609375,0.003757476806640625,-0.01332855224609375,-0.0081024169921875,-0.0252227783203125,0.0125732421875,0.00164794921875,-0.009490966796875,-0.0182647705078125,-0.03497314453125,-0.0187225341796875,-0.001026153564453125,-0.06793212890625,-0.05291748046875,-0.0297393798828125,-0.005031585693359375,-0.026519775390625,-0.00891876220703125,0.0096893310546875,-0.0189056396484375,0.01444244384765625,-0.0270233154296875,-0.0010528564453125,0.006771087646484375,-0.00942230224609375,0.03399658203125,-0.0203094482421875,-0.004795074462890625,0.0025959014892578125,0.01538848876953125,-0.00620269775390625,-0.035675048828125,-0.01142120361328125,0.0011234283447265625,-0.0278778076171875,0.00807952880859375,-0.017547607421875,0.0211639404296875,0.037139892578125,-0.0108642578125,-0.0287017822265625,-0.0008664131164550781,-0.00862884521484375,-0.006320953369140625,-0.00901031494140625,-0.012451171875,0.017913818359375,0.005092620849609375,-0.04345703125,-0.027801513671875,0.023040771484375,0.007328033447265625,-0.013916015625,-0.007678985595703125,-0.0031185150146484375,0.01546478271484375,0.02020263671875,-0.01259613037109375,0.0040130615234375,0.005023956298828125,0.00421142578125,-0.0018835067749023438,0.0369873046875,-0.0006284713745117188,0.007049560546875,-0.0213165283203125,-0.02215576171875,-0.05023193359375,-0.006420135498046875,0.001811981201171875,0.01995849609375,0.007694244384765625,-0.0081329345703125,-0.0347900390625,0.01042938232421875,-0.03131103515625,0.0312042236328125,-0.00971221923828125,-0.0352783203125,0.021209716796875,-0.009490966796875,0.00710296630859375,-0.004848480224609375,-0.01030731201171875,0.0037136077880859375,0.0234222412109375,0.004337310791015625,-0.03436279296875,0.0008835792541503906,-0.036712646484375,0.007740020751953125,0.003978729248046875,-0.0178985595703125,-0.0027065277099609375,0.035491943359375,0.01148223876953125,0.01496124267578125,-0.0025386810302734375,0.014404296875,0.007572174072265625,0.016876220703125,-0.0023212432861328125,0.002727508544921875,-0.005374908447265625,0.01690673828125,-0.020599365234375,-0.00002384185791015625,0.0305328369140625,-0.052734375,0.01496124267578125,0.0039215087890625,-0.00762176513671875,0.031585693359375,-0.01617431640625,-0.01222991943359375,0.00873565673828125,-0.033966064453125,0.01061248779296875,-0.0209197998046875,-0.0198516845703125,0.035247802734375,0.0244598388671875,0.0082550048828125,-0.00787353515625,-0.01544952392578125,0.01302337646484375,-0.0166168212890625,-0.0147247314453125,0.02618408203125,-0.0158233642578125,-0.0394287109375,0.0151214599609375,-0.004146575927734375,-0.035369873046875,0.045928955078125,0.04241943359375,0.01354217529296875,0.0343017578125,-0.007183074951171875,0.0129241943359375,-0.004955291748046875,0.025299072265625,0.01538848876953125,-0.0054779052734375,-0.00630950927734375,-0.010711669921875,0.043914794921875,-0.004856109619140625,0.05169677734375,-0.020111083984375,0.023406982421875,-0.0021114349365234375,-0.039215087890625,-0.01314544677734375,-0.0036773681640625,0.01031494140625,-0.00981903076171875,0.01366424560546875,0.0101776123046875,0.0274658203125,-0.0386962890625,0.0194244384765625,-0.04803466796875,0.033172607421875,0.0269775390625,-0.0176849365234375,-0.0016927719116210938,-0.02783203125,0.0015516281127929688,0.01325225830078125,-0.028472900390625,0.01470947265625,0.036773681640625,-0.038482666015625,-0.0009303092956542969,0.0236053466796875,-0.00498199462890625,0.0165557861328125,0.00003445148468017578,-0.03741455078125,-0.0517578125,-0.0090179443359375,-0.033966064453125,-0.0170440673828125,0.0013637542724609375,-0.04473876953125,-0.059478759765625,-0.0165557861328125,-0.047119140625,-0.033721923828125,0.018890380859375,0.00160980224609375,0.050811767578125,-0.0221099853515625,0.0306396484375,-0.01096343994140625,-0.007175445556640625,0.01580810546875,-0.00650787353515625,-0.00467681884765625,0.0256500244140625,0.006931304931640625,0.00316619873046875,-0.0170745849609375,-0.003265380859375,0.00554656982421875,-0.0166473388671875,0.0006661415100097656,0.0297393798828125,-0.00568389892578125,0.01043701171875,-0.03863525390625,0.01531982421875,0.021087646484375,0.002185821533203125,0.00977325439453125,-0.028594970703125,-0.0166473388671875,-0.00018537044525146484,-0.0014066696166992188,0.014312744140625,0.025299072265625,-0.0149383544921875,0.001495361328125,0.03692626953125,0.00438690185546875,0.05572509765625,-0.00350189208984375,0.0156402587890625,0.005992889404296875,-0.005748748779296875,-0.01739501953125,0.017059326171875,0.0006203651428222656,-0.0163726806640625,-0.0203704833984375,-0.005962371826171875,0.006130218505859375,-0.00022983551025390625,-0.014007568359375,-0.0025844573974609375,-0.0171356201171875,0.0130157470703125,-0.005809783935546875,0.0174560546875,-0.0196075439453125,-0.017486572265625,-0.035369873046875,0.0016012191772460938,-0.02008056640625,-0.0213775634765625,0.04119873046875,-0.0125732421875,-0.00983428955078125,0.01010894775390625,-0.01099395751953125,-0.009613037109375,-0.01091766357421875,0.0032520294189453125,-0.004924774169921875,-0.041656494140625,0.01227569580078125,0.011077880859375,-0.040740966796875,0.002017974853515625,-0.0193023681640625,0.014739990234375,-0.0018491744995117188,0.008636474609375,0.017791748046875,-0.0012598037719726562,-0.004123687744140625,-0.006511688232421875,-0.0179443359375,-0.03619384765625,-0.0009822845458984375,0.0066680908203125,-0.0012950897216796875,0.0031185150146484375,-0.05401611328125,0.0266876220703125,-0.035308837890625,-0.0234375,0.0234222412109375,-0.037384033203125,0.002349853515625,0.01290130615234375,-0.0321044921875,0.019622802734375,-0.052337646484375,-0.00556182861328125,0.005496978759765625,0.0078125,0.010101318359375,-0.0055084228515625,0.021087646484375,0.016754150390625,0.0192413330078125,-0.024261474609375,0.0457763671875,-0.0185394287109375,0.0007729530334472656,0.0173187255859375,0.0224456787109375,0.0283355712890625,0.00576019287109375,0.04150390625,-0.005279541015625,0.01000213623046875,0.01496124267578125,0.003604888916015625,-0.033447265625,0.013824462890625,-0.0014410018920898438,-0.0225067138671875,-0.0017547607421875,0.0235443115234375,0.0171966552734375,0.0234375,-0.00482177734375,-0.0062103271484375,0.01885986328125,-0.003917694091796875,0.0172119140625,0.0240478515625,-0.006069183349609375,-0.0166015625,-0.00955963134765625,-0.01861572265625,0.0198822021484375,-0.046875,-0.0011920928955078125,-0.00972747802734375,0.01349639892578125,-0.00629425048828125,-0.0087738037109375,0.01393890380859375,0.0006022453308105469,-0.007038116455078125,-0.017181396484375,-0.00965118408203125,0.0133514404296875,-0.0025787353515625,0.017547607421875,-0.0276641845703125,0.018890380859375,0.01517486572265625,-0.0311737060546875,-0.016815185546875,0.00264739990234375,-0.0214080810546875,0.0181884765625,-0.01145172119140625,-0.0011072158813476562,0.02880859375,0.00782012939453125,-0.0238037109375,0.039031982421875,-0.00690460205078125,0.0018301010131835938,0.0305023193359375,0.005344390869140625,-0.003803253173828125,-0.033782958984375,0.01241302490234375,0.0206146240234375,0.00766754150390625,0.0177459716796875,-0.002201080322265625,-0.01444244384765625,0.031402587890625,-0.04498291015625,-0.02203369140625,-0.017486572265625,0.031341552734375,0.032562255859375,-0.031951904296875,0.0182037353515625,-0.01207733154296875,0.0235748291015625,0.0391845703125,0.00971221923828125,0.029388427734375,-0.038360595703125,0.025726318359375,-0.0040435791015625,0.020233154296875,0.0009427070617675781,0.0347900390625,-0.0226287841796875,0.01318359375,0.01505279541015625,0.01042938232421875,-0.011749267578125,-0.022705078125,-0.006938934326171875,0.008087158203125,-0.00205230712890625,-0.018463134765625,0.02960205078125,-0.0309600830078125,-0.024749755859375,0.004817962646484375,-0.01258087158203125,0.00850677490234375,-0.00560760498046875,-0.021881103515625,-0.004638671875,0.0244903564453125,-0.020416259765625,0.02655029296875,-0.0226287841796875,0.030029296875,0.024139404296875,0.03497314453125,0.0161285400390625,0.0206756591796875,-0.040924072265625,0.01042938232421875,0.048126220703125,0.006565093994140625,-0.00260162353515625,0.037139892578125,0.0006361007690429688,-0.01007843017578125,0.0282745361328125,-0.013702392578125,0.044525146484375,-0.006237030029296875,0.034637451171875,0.0285186767578125,0.0124053955078125,-0.034423828125,0.0007100105285644531,-0.045501708984375,-0.0219268798828125,-0.00836181640625,-0.03704833984375,-0.07000732421875,0.006748199462890625,-0.0036602020263671875,0.00751495361328125,-0.0162353515625,-0.0137176513671875,0.0227203369140625,0.001644134521484375,-0.028656005859375,-0.00397491455078125,-0.0088043212890625,-0.0007772445678710938,0.035797119140625,0.0389404296875,0.0380859375,-0.005031585693359375,0.0059967041015625,-0.016815185546875,-0.0027980804443359375,0.0127410888671875,0.03399658203125,-0.0003867149353027344,0.00679779052734375,-0.0079193115234375,-0.02294921875,0.023101806640625,0.0009560585021972656,0.042694091796875,-0.031768798828125,-0.00247955322265625,0.0197296142578125,0.0196075439453125,-0.0229339599609375,-0.0250396728515625,-0.0006723403930664062,0.011871337890625,0.0308990478515625,0.002803802490234375,0.003803253173828125,-0.0112762451171875,0.0016689300537109375,-0.040985107421875,0.0175933837890625,0.029083251953125,-0.00962066650390625,-0.0384521484375,-0.006683349609375,0.00439453125,0.0269012451171875,0.02252197265625,-0.027587890625,0.003749847412109375,-0.004119873046875,-0.015228271484375,-0.031036376953125,-0.0042724609375,-0.043853759765625,-0.0016918182373046875,-0.015411376953125,0.03643798828125,-0.03814697265625,0.020599365234375,-0.007030487060546875,-0.02532958984375,-0.0216522216796875,0.0016412734985351562,0.00982666015625,0.0205230712890625,0.02484130859375,0.0078887939453125,-0.0261077880859375,0.0247039794921875,-0.01251983642578125,0.0090789794921875,0.013092041015625,0.0082550048828125,0.006603240966796875,-0.00423431396484375,0.01424407958984375,0.01349639892578125,-0.02264404296875,0.0236358642578125,-0.001506805419921875,0.007030487060546875,-0.01727294921875,-0.0249481201171875,-0.00611114501953125,0.0177459716796875,-0.0077056884765625,0.023773193359375,0.01357269287109375,0.012237548828125,0.0338134765625,-0.029022216796875,0.02880859375,-0.0018472671508789062,-0.024139404296875,-0.032989501953125,0.055084228515625,0.02984619140625,0.040618896484375,0.0006160736083984375,0.03814697265625,0.022552490234375,-0.01071929931640625,0.0250091552734375,0.033782958984375,0.00806427001953125,-0.005443572998046875,-0.00899505615234375,-0.00969696044921875,0.01045989990234375,0.037384033203125,0.01308441162109375,-0.01435089111328125,-0.0032367706298828125,0.0186004638671875,-0.0330810546875,-0.014617919921875,0.01088714599609375,-0.00847625732421875,0.02984619140625,-0.0283355712890625,0.023162841796875,0.019134521484375,-0.01218414306640625,-0.033966064453125,-0.028839111328125,-0.022552490234375,-0.02001953125,0.005214691162109375,-0.01418304443359375,0.0035915374755859375,-0.011993408203125,0.0076751708984375,-0.0098876953125,-0.002002716064453125,-0.0008831024169921875,-0.01294708251953125,-0.05120849609375,0.0008082389831542969,0.0205535888671875,-0.0017843246459960938,0.006366729736328125,0.0137939453125,0.060699462890625,-0.0177459716796875,-0.005641937255859375,0.0170440673828125,0.0026397705078125,0.009857177734375,-0.024658203125,0.006175994873046875,0.04205322265625,0.0253143310546875,0.00972747802734375,0.0031375885009765625,-0.022064208984375,0.0006480216979980469,-0.004180908203125,-0.00794219970703125,-0.015106201171875,-0.00901031494140625,-0.00812530517578125,-0.01406097412109375,-0.0247039794921875,-0.0221405029296875,0.025543212890625,0.037353515625,-0.01702880859375,-0.0021762847900390625,0.0237274169921875,0.016632080078125,-0.0335693359375,0.002178192138671875,-0.022705078125,-0.011810302734375,0.01666259765625,0.0287628173828125,-0.02313232421875,-0.011199951171875,0.026702880859375,-0.0195770263671875,0.0278778076171875,0.0106658935546875,-0.0199432373046875,-0.035919189453125,0.028656005859375,0.0009784698486328125,-0.004291534423828125,-0.0309906005859375,0.03277587890625,0.011260986328125,0.0112457275390625,-0.034698486328125,-0.01111602783203125,0.0309906005859375,0.042236328125],"object":"embedding"}],"model":"nvidia/llama-3.2-nv-embedqa-1b-v2","usage":{"prompt_tokens":10,"total_tokens":10}} +``` + +{{% /tab %}} +{{< /tabs >}} diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/1-workshop-setup/6-setup-users.md b/content/ja/ninja-workshops/14-cisco-ai-pods/1-workshop-setup/6-setup-users.md new file mode 100644 index 0000000000..68be9b735e --- /dev/null +++ b/content/ja/ninja-workshops/14-cisco-ai-pods/1-workshop-setup/6-setup-users.md @@ -0,0 +1,169 @@ +--- +title: ユーザーのセットアップ +linkTitle: 6. ユーザーのセットアップ +weight: 6 +time: 5 minutes +--- + +このセクションでは、ワークショップの各参加者用にユーザーを作成し、それぞれに Namespace とリソースクォータを割り当てます。 + +## ユーザーの Namespace とリソースクォータの作成 + +``` bash +cd user-setup +./create-namespaces.sh +``` + +## ユーザーの作成 + +参加者の認証情報を含む HTPasswd ファイルを作成し、ROSA が管理する HTPasswd IdP をカスタムのものに置き換えます。 + +``` bash +./create-users.sh +``` + +## cluster-admin ユーザーの再作成と再ログイン + +cluster-admin ユーザーを再作成し、再度ログインします。 + +``` bash +rosa create admin -c rosa-test +oc login --username cluster-admin --password +``` + +## ユーザーへのロールの追加 + +各ユーザーに自分の Namespace のみへのアクセス権を付与します。 + +``` bash +./add-role-to-users.sh +``` + +注意: 以下のようなエラーが表示された場合、安全に無視できます。 +```` +Warning: User 'participant1' not found +clusterrole.rbac.authorization.k8s.io/admin added: "participant1" +```` + +## ログインのテスト + +### OpenShift CLI のインストール + +ローカルマシンからログインをテストするには、OpenShift CLI をインストールする必要があります。 + +MacOS の場合、Homebrew パッケージマネージャーを使用して OpenShift CLI をインストールできます。 + +``` bash +brew install openshift-cli +``` + +その他のインストールオプションについては、[OpenShift のドキュメント](https://docs.redhat.com/en/documentation/openshift_container_platform/4.8/html/cli_tools/openshift-cli-oc)を参照してください。 + +### ワークショップユーザーとしてログイン + +ローカルマシンからワークショップユーザーの1人としてログインしてみます。 + +``` bash +oc login https://api.:443 -u participant1 -p 'TempPass123!' +``` + +以下のように表示されるはずです。 + +```` +Login successful. + +You have one project on this server: "workshop-participant-1" +```` + +### LLM へのアクセスの確認 + +ワークショップユーザーアカウントから LLM にアクセスできることを確認します。 + +curl コマンドを使用できる Pod を起動します。 + +``` bash +oc run curl --rm -it --image=curlimages/curl:latest \ + --overrides='{ + "spec": { + "containers": [{ + "name": "curl", + "image": "curlimages/curl:latest", + "stdin": true, + "tty": true, + "command": ["sh"], + "resources": { + "limits": { + "cpu": "50m", + "memory": "100Mi" + }, + "requests": { + "cpu": "50m", + "memory": "100Mi" + } + } + }] + } + }' +``` + +次に、以下のコマンドを実行して LLM にプロンプトを送信します。 + +{{< tabs >}} +{{% tab title="スクリプト" %}} + +``` bash +curl -X "POST" \ + 'http://meta-llama-3-2-1b-instruct.nim-service:8000/v1/chat/completions' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -d '{ + "model": "meta/llama-3.2-1b-instruct", + "messages": [ + { + "content":"What is the capital of Canada?", + "role": "user" + }], + "top_p": 1, + "n": 1, + "max_tokens": 1024, + "stream": false, + "frequency_penalty": 0.0, + "stop": ["STOP"] + }' +``` + +{{% /tab %}} +{{% tab title="出力例" %}} + +``` bash +{ + "id": "chatcmpl-2ccfcd75a0214518aab0ef0375f8ca21", + "object": "chat.completion", + "created": 1758919002, + "model": "meta/llama-3.2-1b-instruct", + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "reasoning_content": null, + "content": "The capital of Canada is Ottawa.", + "tool_calls": [] + }, + "logprobs": null, + "finish_reason": "stop", + "stop_reason": null + } + ], + "usage": { + "prompt_tokens": 42, + "total_tokens": 50, + "completion_tokens": 8, + "prompt_tokens_details": null + }, + "prompt_logprobs": null +} +``` + +{{% /tab %}} +{{< /tabs >}} diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/1-workshop-setup/7-install-otel-collector.md b/content/ja/ninja-workshops/14-cisco-ai-pods/1-workshop-setup/7-install-otel-collector.md new file mode 100644 index 0000000000..58ae7fa1ae --- /dev/null +++ b/content/ja/ninja-workshops/14-cisco-ai-pods/1-workshop-setup/7-install-otel-collector.md @@ -0,0 +1,104 @@ +--- +title: OpenTelemetry Collector のインストール +linkTitle: 7. OpenTelemetry Collector のインストール +weight: 7 +time: 5 minutes +--- + +このセクションでは、clusterReceiver のみを有効にした OpenTelemetry Collector をインストールします(ワークショップ参加者は自分の Namespace に独自のエージェントをインストールします)。 +次に、この Collector のインストールによって作成された ClusterRole を、各ワークショップ参加者の Namespace にバインドします。 + +## OpenTelemetry Collector のインストール + +まず、Collector 用の新しいプロジェクトを作成し、そのプロジェクトに切り替えます。 + +```bash +oc new-project admin-otel +``` + +Splunk OpenTelemetry Collector for Kubernetes の Helm チャートリポジトリを追加します。 + +```bash +helm repo add splunk-otel-collector-chart https://signalfx.github.io/splunk-otel-collector-chart +```` + +リポジトリが最新であることを確認します。 + +```bash +helm repo update +```` + +`./admin-otel-collector/admin-otel-collector-values.yaml` ファイルを確認します。このファイルを使用して OpenTelemetry Collector をインストールします。 + +Collector のデータ送信先となる Splunk 環境を設定するための環境変数を設定します。 + +``` bash +export CLUSTER_NAME=ai-pod-workshop-admin +export ENVIRONMENT_NAME=ai-pod-workshop-admin +export SPLUNK_ACCESS_TOKEN= +export SPLUNK_REALM= +export SPLUNK_HEC_URL=:443/services/collector/event> +export SPLUNK_HEC_TOKEN= +export SPLUNK_INDEX=splunk4rookies-workshop +``` + +次に、以下のコマンドを使用して Collector をインストールします。 + +```bash +helm install splunk-otel-collector \ + --set="clusterName=$CLUSTER_NAME" \ + --set="environment=$ENVIRONMENT_NAME" \ + --set="splunkObservability.accessToken=$SPLUNK_ACCESS_TOKEN" \ + --set="splunkObservability.realm=$SPLUNK_REALM" \ + --set="splunkPlatform.endpoint=$SPLUNK_HEC_URL" \ + --set="splunkPlatform.token=$SPLUNK_HEC_TOKEN" \ + --set="splunkPlatform.index=$SPLUNK_INDEX" \ + -f ./admin-otel-collector/admin-otel-collector-values.yaml \ + -n admin-otel \ + splunk-otel-collector-chart/splunk-otel-collector +``` + +以下のコマンドを実行して、すべての Collector Pod が実行中であることを確認します。 + +```` +oc get pods -n admin-otel + +NAME READY STATUS RESTARTS AGE +splunk-otel-collector-k8s-cluster-receiver-7b7f5cdc5b-rhxsj 1/1 Running 0 6m40s +```` + +## 各ワークショップ参加者のサービスアカウント作成と ClusterRole へのバインド + +``` bash +for i in {1..30}; do + ns="workshop-participant-$i" + + oc get ns "$ns" >/dev/null 2>&1 || continue + oc -n "$ns" create sa splunk-otel-collector 2>/dev/null || true + + oc apply -f - </dev/null 2>&1 || continue + oc -n "$ns" adm policy add-scc-to-user splunk-otel-collector -z splunk-otel-collector +done +``` diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/1-workshop-setup/8-deploy-vector-db.md b/content/ja/ninja-workshops/14-cisco-ai-pods/1-workshop-setup/8-deploy-vector-db.md new file mode 100644 index 0000000000..d7910a2758 --- /dev/null +++ b/content/ja/ninja-workshops/14-cisco-ai-pods/1-workshop-setup/8-deploy-vector-db.md @@ -0,0 +1,79 @@ +--- +title: ベクターデータベースのデプロイ +linkTitle: 8. ベクターデータベースのデプロイ +weight: 8 +time: 10 minutes +--- + +このステップでは、OpenShift クラスターにベクターデータベースをデプロイし、ワークショップ参加者が使用するテストデータを投入します。 + +## ベクターデータベースのデプロイ + +このワークショップでは、オープンソースのベクターデータベースである [Weaviate](https://weaviate.io/) をデプロイします。 + +まず、Weaviate の Helm チャートを含む Weaviate Helm リポジトリを追加します。 + +``` bash +helm repo add weaviate https://weaviate.github.io/weaviate-helm +helm repo update +``` + +`weaviate/weaviate-values.yaml` ファイルには、Weaviate ベクターデータベースのデプロイに使用する設定が含まれています。 + +Weaviate が Prometheus レシーバーでスクレイピングできるメトリクスを公開するように、以下の環境変数を `TRUE` に設定しています。 + +```` + PROMETHEUS_MONITORING_ENABLED: true + PROMETHEUS_MONITORING_GROUP: true +```` + +追加のカスタマイズオプションについては、[Weaviate のドキュメント](https://docs.weaviate.io/deploy/installation-guides/k8s-installation)を参照してください。 + +新しい Namespace を作成します。 + +``` bash +oc create namespace weaviate +``` + +以下のコマンドを実行して、Weaviate が特権コンテナを実行できるようにします。 + +> 注意: この方法は本番環境では推奨されません。 + +``` bash +oc adm policy add-scc-to-user privileged -z default -n weaviate +``` + +次に、Weaviate をデプロイします。 + +``` bash +helm upgrade --install \ + "weaviate" \ + weaviate/weaviate \ + --namespace "weaviate" \ + --values ./weaviate/weaviate-values.yaml +``` + +## ベクターデータベースへのデータ投入 + +Weaviate が起動したので、ワークショップでカスタムアプリケーションと共に使用するデータを追加します。 + +この作業に使用するアプリケーションは、[LangChain Playbook for NeMo Retriever Text Embedding NIM](https://docs.nvidia.com/nim/nemo-retriever/text-embedding/latest/playbook.html#generate-embeddings-with-text-embedding-nim) に基づいています。 + +`./load-embeddings/k8s-job.yaml` の設定に従い、[NVIDIA H200 Tensor Core GPU のデータシート](https://nvdam.widen.net/content/udc6mzrk7a/original/hpc-datasheet-sc23-h200-datasheet-3002446.pdf)をベクターデータベースにロードします。 + +このドキュメントには、大規模言語モデルが学習していない NVIDIA H200 GPU に関する情報が含まれています。ワークショップの次のパートでは、ベクターデータベースにロードされたこのドキュメントのコンテキストを使用して、LLM が質問に回答するアプリケーションを構築します。 + +OpenShift クラスターに Kubernetes Job をデプロイしてエンベディングをロードします。 +このプロセスが1回だけ実行されるようにするために、Pod ではなく Kubernetes Job を使用します。 + +``` bash +oc create namespace llm-app +oc apply -f ./load-embeddings/k8s-job.yaml +``` + +> 注意: エンベディングを Weaviate にロードする Python アプリケーションの Docker イメージをビルドするために、以下のコマンドを実行しました。 +> ``` bash +> cd workshop/cisco-ai-pods/load-embeddings +> docker build --platform linux/amd64 -t derekmitchell399/load-embeddings:1.0 . +> docker push derekmitchell399/load-embeddings:1.0 +> ``` diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/1-workshop-setup/9-deploy-portworx-service.md b/content/ja/ninja-workshops/14-cisco-ai-pods/1-workshop-setup/9-deploy-portworx-service.md new file mode 100644 index 0000000000..d232a7a08d --- /dev/null +++ b/content/ja/ninja-workshops/14-cisco-ai-pods/1-workshop-setup/9-deploy-portworx-service.md @@ -0,0 +1,50 @@ +--- +title: Portworx メトリクスエンドポイントのデプロイ +linkTitle: 9. Portworx メトリクスエンドポイント +weight: 9 +time: 10 minutes +--- + +このステップでは、Portworx メトリクスエンドポイントを模倣する Python サービスをデプロイします。 +これはワークショップで Pure Storage のモニタリングを設定する際に使用します。 + +## Portworx メトリクスエンドポイントのデプロイ + +以下のコマンドを実行して、Portworx メトリクスエンドポイントサービスをデプロイします。 + +``` bash +oc new-project portworx +oc apply -f ./portworx/k8s.yaml -n portworx +``` + +## Portworx メトリクスエンドポイントのテスト + +Portworx メトリクスエンドポイントが期待通りに動作していることを確認します。 + +curl コマンドを使用できる Pod を起動します。 + +``` bash +oc run --rm -it -n default curl --image=curlimages/curl:latest -- sh +``` + +次に、以下のコマンドを実行してエンドポイントにリクエストを送信します。 + +{{< tabs >}} +{{% tab title="スクリプト" %}} + +``` bash +curl http://portworx-metrics-sim.portworx:17001/metrics +``` + +{{% /tab %}} +{{% tab title="出力例" %}} + +``` bash +# HELP px_cluster_cpu_percent Percentage of CPU Used +# TYPE px_cluster_cpu_percent gauge +px_cluster_cpu_percent{cluster="ocp-pxclus-32430549-ad99-4839-bf9b-d6beb8ddc2d6",clusterUUID="e870909b-6150-4d72-87cb-a012630e42ae",node="worker2.flashstack.local",nodeID="f63312a2-0884-4878-be4e-51935613aa80"} 1.91 +... +``` + +{{% /tab %}} +{{< /tabs >}} diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/1-workshop-setup/_index.md b/content/ja/ninja-workshops/14-cisco-ai-pods/1-workshop-setup/_index.md new file mode 100644 index 0000000000..a29bb79be5 --- /dev/null +++ b/content/ja/ninja-workshops/14-cisco-ai-pods/1-workshop-setup/_index.md @@ -0,0 +1,17 @@ +--- +title: ワークショップセットアップ +linkTitle: 1. ワークショップセットアップ +weight: 1 +--- + +このセクションには、ワークショップ主催者がワークショップをセットアップするために実行する手順が含まれています: + +* AWS アカウントのセットアップ +* OpenShift の前提条件 +* AWS ROSA を使用して、GPU ベースのワーカーノードを持つ **Red Hat OpenShift** クラスターをデプロイします。 +* **NVIDIA NIM Operator** と **NVIDIA GPU Operator** をデプロイします。 +* NVIDIA NIM を使用して **大規模言語モデル(LLM)** をクラスターにデプロイします。 +* 適切な権限を持つ各ワークショップユーザー用の OpenShift ログインとネームスペースを作成します。 +* **Splunk OpenTelemetry Collector** の Cluster Receiver コンポーネントをインストールします。 +* クラスターに **Weaviate ベクトルデータベース** をデプロイします。 +* **Portworx Prometheus exporter** を模倣するサービスをデプロイします。 diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/1-overview-of-workshop-environment.md b/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/1-overview-of-workshop-environment.md new file mode 100644 index 0000000000..a262dbd301 --- /dev/null +++ b/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/1-overview-of-workshop-environment.md @@ -0,0 +1,48 @@ +--- +title: ワークショップ環境の概要 +linkTitle: 1. ワークショップ環境の概要 +weight: 1 +time: 5 minutes +--- + +**Cisco の AI 対応 POD** は、最先端のハードウェアとソフトウェアを組み合わせて、堅牢でスケーラブルかつ効率的な AI インフラストラクチャを提供します。 +**Splunk Observability Cloud** は、インフラストラクチャからアプリケーションコンポーネントまで、このスタック全体に対する包括的な可視性を提供します。 + +このハンズオンワークショップでは、OpenTelemetry と Prometheus を使用して AI インフラストラクチャをモニタリングする方法を学びます。**実際の Cisco AI POD へのアクセスは不要です**。現実的な環境でモニタリング技術のデプロイと設定に関する実践的な経験を得ることができます。 + +## ラボ環境 + +このワークショップでは、AWS 上で動作する共有の **OpenShift クラスター** を使用します。このクラスターには NVIDIA GPU と NVIDIA AI Enterprise ソフトウェアが搭載されています。 + +### デプロイ済みのインフラストラクチャ + +ワークショップの講師が、以下の共有コンポーネントをワークショップ環境にデプロイ済みです。 + +* **NVIDIA NIM モデル**: + * `meta/llama-3.2-1b-instruct` - ユーザーのプロンプトを処理 + * `nvidia/llama-3.2-nv-embedqa-1b-v2` - エンベディングを生成 +* **Weaviate** - セマンティック検索と検索取得のためのベクトルデータベース +* **Prometheus exporter** - 本番環境の AI POD で一般的な Pure Storage メトリクスをシミュレート + +### ワークスペース + +各参加者は共有クラスター内の専用 Namespace を割り当てられ、独立した作業のための隔離された環境が確保されます。 + +## ワークショップの内容 + +ワークショップ中、各参加者は以下のタスクを実行します。 + +1. 自分の Namespace に **OpenTelemetry Collector** をデプロイおよび設定する +2. クラスターインフラストラクチャとのオブザーバビリティデータ収集を統合する +3. NVIDIA NIM モデルを活用する **Python アプリケーション** をデプロイする +4. Splunk Observability Cloud を使用してアプリケーションのパフォーマンスとインフラストラクチャメトリクスをモニタリングする + +## Prometheus とは + +**Prometheus** は通常、ストレージとアラートに使用されるフルスタックモニタリングシステムを指しますが、このワークショップでは Prometheus エコシステムのデータ標準に焦点を当てます。 + +このワークショップでは **Prometheus Exporter** を活用します。これは、コンポーネントの内部ヘルスを標準化されたメトリクスエンドポイント(例: http://localhost:9100/metrics)に変換する小さなユーティリティです。 + +フル構成の Prometheus サーバーを使用してこのデータを収集する代わりに、**OpenTelemetry Collector** を使用します。**Prometheus レシーバー** を使用することで、Collector はこれらのエンドポイントを **スクレイプ** でき、広くサポートされている業界フォーマットを使用してリッチなテレメトリデータを収集できます。 + + diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/10-deploy-llm-app.md b/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/10-deploy-llm-app.md new file mode 100644 index 0000000000..03100db846 --- /dev/null +++ b/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/10-deploy-llm-app.md @@ -0,0 +1,77 @@ +--- +title: LLM アプリケーションのデプロイ +linkTitle: 10. LLM アプリケーションのデプロイ +weight: 10 +time: 10 minutes +--- + +## LLM アプリケーションのデプロイ + +以下のコマンドを使用して、このアプリケーションを OpenShift クラスターにデプロイします: + +``` bash +oc apply -f ./llm-app/k8s-manifest.yaml +``` + +> 注意: この Python アプリケーションの Docker イメージをビルドするために、以下のコマンドを実行しました: +> ``` bash +> cd workshop/cisco-ai-pods/llm-app +> docker build --platform linux/amd64 -t ghcr.io/splunk/cisco-ai-pod-workshop-app:1.0 . +> docker push ghcr.io/splunk/cisco-ai-pod-workshop-app:1.0 +> ``` + +## LLM アプリケーションのテスト + +アプリケーションが期待どおりに動作していることを確認しましょう。 + +curl コマンドにアクセスできる Pod を起動します: + +``` bash +oc run curl --rm -it --image=curlimages/curl:latest \ + --overrides='{ + "spec": { + "containers": [{ + "name": "curl", + "image": "curlimages/curl:latest", + "stdin": true, + "tty": true, + "command": ["sh"], + "resources": { + "limits": { + "cpu": "50m", + "memory": "100Mi" + }, + "requests": { + "cpu": "50m", + "memory": "100Mi" + } + } + }] + } + }' +``` + +次に、以下のコマンドを実行して LLM に質問を送信します: + +{{< tabs >}} +{{% tab title="スクリプト" %}} + +``` bash +curl -X "POST" \ + 'http://llm-app:8080/askquestion' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -d '{ + "question": "How much memory does the NVIDIA H200 have?" + }' +``` + +{{% /tab %}} +{{% tab title="出力例" %}} + +``` bash +The NVIDIA H200 has 141GB of HBM3e memory, which is twice the capacity of the NVIDIA H100 Tensor Core GPU with 1.4X more memory bandwidth. +``` + +{{% /tab %}} +{{< /tabs >}} diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/11-review-traces.md b/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/11-review-traces.md new file mode 100644 index 0000000000..40d8a5a31d --- /dev/null +++ b/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/11-review-traces.md @@ -0,0 +1,37 @@ +--- +title: メトリクス、トレース、およびログの確認 +linkTitle: 11. メトリクス、トレース、およびログの確認 +weight: 11 +time: 10 minutes +--- + +## Splunk Observability Cloud でトレースデータを表示する + +Splunk Observability Cloud で `APM` に移動し、`Service Map` を選択します。 +お使いの環境名が選択されていることを確認してください(例: `ai-pod-workshop-participant-1`)。 +以下のようなサービスマップが表示されるはずです: + +![Service Map](../../images/ServiceMap.png) + +右側のメニューで `Traces` をクリックします。次に、実行時間の長いトレースを1つ選択します。以下の例のように表示されるはずです: + +![Trace](../../images/Trace.png) + +このトレースは、ユーザーの質問(例: 「How much memory does the NVIDIA H200 have?」)に対する回答を返すために、アプリケーションが実行したすべてのインタラクションを示しています。 + +例えば、アプリケーションが Weaviate ベクトルデータベースで質問に関連するドキュメントを検索するために類似度検索を実行した箇所を確認できます。 + +また、ベクトルデータベースから取得したコンテキストを含め、アプリケーションが LLM に送信するプロンプトをどのように作成したかも確認できます: + +![Prompt Template](../../images/PromptTemplate.png) + +最後に、LLM からのレスポンス、所要時間、および使用された入力トークンと出力トークンの数を確認できます: + +![LLM Response](../../images/LLMResponse.png) + +## メトリクスが Splunk に送信されていることを確認する + +Splunk Observability Cloud で `Dashboards` に移動し、`Built-in dashboard groups` に含まれる `Cisco AI PODs Dashboard` を検索します。 +`NIM FOR LLMS` タブに移動し、お使いの OpenShift クラスター名でダッシュボードがフィルタリングされていることを確認します。以下の例のようにチャートにデータが表示されているはずです: + +![NIM LLMS Dashboard](../../images/NIMLLM.png) diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/12-wrapup.md b/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/12-wrapup.md new file mode 100644 index 0000000000..87bbafd702 --- /dev/null +++ b/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/12-wrapup.md @@ -0,0 +1,20 @@ +--- +title: まとめ +linkTitle: 12. まとめ +weight: 12 +time: 5 minutes +--- + +## まとめ + +このワークショップをお楽しみいただけたことを願っています。本ワークショップでは、Splunk Observability Cloud を使用して Cisco AI PODs をモニタリングするために使用されるいくつかの技術を、ハンズオン形式でデプロイおよび操作する体験を提供しました。具体的には、以下の内容を体験していただきました: + +* GPU ベースのワーカーノードを持つ RedHat OpenShift クラスターでの作業。 +* NVIDIA NIM Operator および NVIDIA GPU Operator での作業。 +* NVIDIA NIM を使用してクラスターにデプロイされた Large Language Models (LLMs) での作業。 +* Red Hat OpenShift クラスターへの OpenTelemetry Collector のデプロイ。 +* インフラストラクチャメトリクスを取り込むための Prometheus レシーバーの Collector への追加。 +* クラスター内の Weaviate ベクトルデータベースのモニタリング。 +* Prometheus を使用した Pure Storage メトリクスのモニタリング設定。 +* Large Language Models (LLMs) と対話する Python サービスの OpenTelemetry による計装。 +* LLM と対話するアプリケーションのトレースで OpenTelemetry がキャプチャする詳細情報の理解。 diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/2-connect-to-openshift-cluster.md b/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/2-connect-to-openshift-cluster.md new file mode 100644 index 0000000000..377209dfc3 --- /dev/null +++ b/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/2-connect-to-openshift-cluster.md @@ -0,0 +1,84 @@ +--- +title: OpenShift クラスターへの接続 +linkTitle: 2. OpenShift クラスターへの接続 +weight: 2 +time: 5 minutes +--- + +## EC2 インスタンスへの接続 + +各参加者用に AWS/EC2 上に Ubuntu Linux インスタンスを用意しています。 + +講師から提供された IP アドレスとパスワードを使用して、以下のいずれかの方法で EC2 インスタンスに接続します。 + +* Mac OS / Linux + * ssh splunk@IP address +* Windows 10+ + * OpenSSH クライアントを使用 +* それ以前のバージョンの Windows + * Putty を使用 + +## ワークショップ参加者番号の設定 + +講師が各参加者に 1 から 30 までの番号を割り当てます。 +この番号を環境変数に保存してください。ワークショップ全体を通して使用するため、番号を覚えておいてください。 + +``` bash +export PARTICIPANT_NUMBER= +``` + +## OpenShift CLI のインストール + +OpenShift クラスターにアクセスするために、OpenShift CLI をインストールする必要があります。 + +以下のコマンドを使用して、OpenShift CLI バイナリを EC2 インスタンスに直接ダウンロードします。 + +```` +curl -L -O https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/stable/openshift-client-linux.tar.gz +```` + +コンテンツを展開します。 + +```` +tar -xvzf openshift-client-linux.tar.gz +```` + +生成されたファイル(`oc` と `kubectl`)を、パスに含まれている場所に移動します。例えば以下のようにします。 + +``` bash +sudo mv oc /usr/local/bin/oc +sudo mv kubectl /usr/local/bin/kubectl +``` + +## OpenShift クラスターへの接続 + +Kube config ファイルが splunk ユーザーによって変更可能であることを確認します。 + +``` bash +chmod 600 /home/splunk/.kube/config +``` + +ワークショップ主催者から提供されたクラスター API URL とパスワードを使用して、OpenShift クラスターにログインします。 + +``` bash +oc login https://api.:443 -u participant$PARTICIPANT_NUMBER -p '' +``` + +OpenShift クラスターに接続されていることを確認します。 + +{{< tabs >}} +{{% tab title="スクリプト" %}} + +``` bash +oc whoami --show-server +``` + +{{% /tab %}} +{{% tab title="出力例" %}} + +``` bash +https://api.***.openshiftapps.com:443 +``` + +{{% /tab %}} +{{< /tabs >}} diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/3-deploy-otel-collector.md b/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/3-deploy-otel-collector.md new file mode 100644 index 0000000000..1ae654da7b --- /dev/null +++ b/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/3-deploy-otel-collector.md @@ -0,0 +1,111 @@ +--- +title: OpenTelemetry Collector のデプロイ +linkTitle: 3. OpenTelemetry Collector のデプロイ +weight: 3 +time: 10 minutes +--- + +このセクションでは、OpenShift の Namespace に OpenTelemetry Collector をデプロイします。 +Collector は、クラスター内で動作するインフラストラクチャとアプリケーションからメトリクス、ログ、トレースを収集し、結果のデータを Splunk Observability Cloud に送信します。 + +## OpenTelemetry Collector のデプロイ + +### Helm がインストールされていることを確認する + +以下のコマンドを実行して、Helm がインストールされていることを確認します。 + +{{< tabs >}} +{{% tab title="スクリプト" %}} + +``` bash +helm version +``` + +{{% /tab %}} +{{% tab title="出力例" %}} + +``` bash +version.BuildInfo{Version:"v3.19.4", GitCommit:"7cfb6e486dac026202556836bb910c37d847793e", GitTreeState:"clean", GoVersion:"go1.24.11"} +``` + +{{% /tab %}} +{{< /tabs >}} + +インストールされていない場合は、以下のコマンドを実行します。 + +``` bash +sudo apt-get install curl gpg apt-transport-https --yes +curl -fsSL https://packages.buildkite.com/helm-linux/helm-debian/gpgkey | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null +echo "deb [signed-by=/usr/share/keyrings/helm.gpg] https://packages.buildkite.com/helm-linux/helm-debian/any/ any main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list +sudo apt-get update +sudo apt-get install helm +``` + +### Splunk OpenTelemetry Collector Helm Chart の追加 + +Splunk OpenTelemetry Collector for Kubernetes の Helm chart リポジトリを追加します。 + +```bash +helm repo add splunk-otel-collector-chart https://signalfx.github.io/splunk-otel-collector-chart +```` + +リポジトリが最新であることを確認します。 + +```bash +helm repo update +```` + +### 環境変数の設定 + +Collector がデータを送信する Splunk 環境を設定するための環境変数を設定します。 + +``` bash +export USER_NAME=workshop-participant-$PARTICIPANT_NUMBER +export CLUSTER_NAME=ai-pod-$USER_NAME +export ENVIRONMENT_NAME=ai-pod-$USER_NAME +export SPLUNK_INDEX=splunk4rookies-workshop +``` + +### Collector のデプロイ + +ワークショップディレクトリに移動します。 + +``` bash +cd ~/workshop/cisco-ai-pods +``` + +以下のコマンドを使用して、自分の Namespace に Collector をインストールします。 + +```bash +helm install splunk-otel-collector \ + --set="clusterName=$CLUSTER_NAME" \ + --set="environment=$ENVIRONMENT_NAME" \ + --set="splunkObservability.accessToken=$ACCESS_TOKEN" \ + --set="splunkObservability.realm=$REALM" \ + --set="splunkPlatform.endpoint=$HEC_URL" \ + --set="splunkPlatform.token=$HEC_TOKEN" \ + --set="splunkPlatform.index=$SPLUNK_INDEX" \ + -f ./otel-collector/otel-collector-values.yaml \ + -n $USER_NAME \ + splunk-otel-collector-chart/splunk-otel-collector +``` + +> Collector のインストール時に `otel-collector-values.yaml` という設定ファイルを参照していることに注意してください。このファイルにはカスタム設定が含まれています。 + +以下のコマンドを実行して、Collector の Pod が実行中であることを確認します。 + +```` +oc get pods + +NAME READY STATUS RESTARTS AGE +splunk-otel-collector-agent-58rwm 1/1 Running 0 6m40s +splunk-otel-collector-agent-8dndr 1/1 Running 0 6m40s +```` + +> 注意: OpenShift 環境では、Collector が起動して `Running` 状態に移行するまで約 3 分かかります。 + +### Splunk Observability Cloud で Collector データを確認する + +**Splunk Observability Cloud** で自分のクラスターが表示されることを確認します。**Infrastructure Monitoring** -> **Kubernetes** -> **Kubernetes Clusters** に移動し、`k8s.cluster.name` にクラスター名(例: `ai-pod-workshop-participant-1`)でフィルターを追加します。 + +![Kubernetes Pods](../../images/KubernetesPods.png) diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/4-monitor-nvidia-components.md b/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/4-monitor-nvidia-components.md new file mode 100644 index 0000000000..3c87d8844c --- /dev/null +++ b/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/4-monitor-nvidia-components.md @@ -0,0 +1,199 @@ +--- +title: NVIDIA コンポーネントのモニタリング +linkTitle: 4. NVIDIA コンポーネントのモニタリング +weight: 4 +time: 10 minutes +--- + +このセクションでは、OpenTelemetry Collector で Prometheus レシーバーを使用して、OpenShift クラスターで動作している NVIDIA コンポーネントをモニタリングします。まず、Collector の設定ファイルが保存されているディレクトリに移動します。 + +``` bash +cd otel-collector +``` + +## NVIDIA DCGM Exporter メトリクスの取得 + +[NVIDIA DCGM exporter](https://github.com/NVIDIA/dcgm-exporter) は OpenShift クラスターで動作しています。これは Splunk に送信できる GPU メトリクスを公開します。 + +これを行うために、Collector のデプロイ時に使用した `otel-collector-values.yaml` ファイルを編集して、Collector の設定をカスタマイズしましょう。 + +`kubeletstats` レシーバーの直下に、以下の内容を追加します。 + +``` yaml + receiver_creator/nvidia: + # Name of the extensions to watch for endpoints to start and stop. + watch_observers: [ k8s_observer ] + receivers: + prometheus/dcgm: + config: + config: + scrape_configs: + - job_name: gpu-metrics + scrape_interval: 60s + static_configs: + - targets: + - '`endpoint`:9400' + rule: type == "pod" && labels["app"] == "nvidia-dcgm-exporter" +``` + +これにより、Collector は `app=nvidia-dcgm-exporter` というラベルを持つ Pod を検索します。このラベルを持つ Pod が見つかると、その Pod のポート 9400 に接続し、デフォルトのメトリクスエンドポイント(`/v1/metrics`)をスクレイプします。 + +> なぜ **Prometheus** レシーバーだけでなく **receiver_creator** レシーバーを使用するのでしょうか? +> * **Prometheus** レシーバーは、事前に定義されたエンドポイントからメトリクスをスクレイプする静的な設定を使用します。 +> * **receiver_creator** レシーバーは、ランタイム情報に基づいてレシーバー(Prometheus レシーバーを含む)を動的に作成でき、スケーラブルで柔軟なスクレイプ設定を可能にします。 +> * **receiver_creator** を使用すると、動的な環境で複数の Prometheus スクレイプターゲットの管理を自動化し、設定を簡素化できます。 + +この新しいレシーバーが使用されるようにするために、`otel-collector-values.yaml` ファイルに新しいパイプラインも追加する必要があります。 + +以下のコードをファイルの末尾に追加します。 + +``` yaml + service: + pipelines: + metrics/nvidia-metrics: + exporters: + - signalfx + processors: + - memory_limiter + - batch + - resourcedetection + - resource + receivers: + - receiver_creator/nvidia +``` + +次のセクションで、NVIDIA に関連するもう 1 つの Prometheus レシーバーを追加します。 + +## NVIDIA NIM メトリクスの取得 + +`meta-llama-3-2-1b-instruct` 大規模言語モデルは、NVIDIA NIM を使用して OpenShift クラスターにデプロイされました。Collector でスクレイプできる Prometheus エンドポイントが含まれています。以下を `otel-collector-values.yaml` ファイルの、先ほど追加した `prometheus/dcgm` レシーバーの直下に追加しましょう。 + +``` yaml + prometheus/nim-llm: + config: + config: + scrape_configs: + - job_name: nim-for-llm-metrics + scrape_interval: 60s + metrics_path: /v1/metrics + static_configs: + - targets: + - '`endpoint`:8000' + rule: type == "pod" && labels["app"] == "meta-llama-3-2-1b-instruct" +``` + +これにより、Collector は `app=meta-llama-3-2-1b-instruct` というラベルを持つ Pod を検索します。このラベルを持つ Pod が見つかると、その Pod のポート 8000 に接続し、`/v1/metrics` メトリクスエンドポイントをスクレイプします。 + +このレシーバーは `receiver_creator/nvidia` レシーバーの一部として既に取得されるため、パイプラインを変更する必要はありません。 + +## フィルタープロセッサーの追加 + +Prometheus エンドポイントのスクレイプは、大量のメトリクスを生成することがあり、カーディナリティが高くなる場合があります。 + +Splunk に送信するメトリクスを正確に定義するフィルタープロセッサーを追加しましょう。具体的には、ダッシュボードのチャートまたはアラートディテクターで使用されているメトリクス **のみ** を送信します。 + +以下のコードを `otel-collector-values.yaml` ファイルの、exporters セクションの後、receivers セクションの前に追加します。 + +``` yaml + processors: + filter/metrics_to_be_included: + metrics: + # Include only metrics used in charts and detectors + include: + match_type: strict + metric_names: + - DCGM_FI_DEV_FB_FREE + - DCGM_FI_DEV_FB_USED + - DCGM_FI_DEV_GPU_TEMP + - DCGM_FI_DEV_GPU_UTIL + - DCGM_FI_DEV_MEM_CLOCK + - DCGM_FI_DEV_MEM_COPY_UTIL + - DCGM_FI_DEV_MEMORY_TEMP + - DCGM_FI_DEV_POWER_USAGE + - DCGM_FI_DEV_SM_CLOCK + - DCGM_FI_DEV_TOTAL_ENERGY_CONSUMPTION + - DCGM_FI_PROF_DRAM_ACTIVE + - DCGM_FI_PROF_GR_ENGINE_ACTIVE + - DCGM_FI_PROF_PCIE_RX_BYTES + - DCGM_FI_PROF_PCIE_TX_BYTES + - DCGM_FI_PROF_PIPE_TENSOR_ACTIVE + - generation_tokens_total + - go_info + - go_memstats_alloc_bytes + - go_memstats_alloc_bytes_total + - go_memstats_buck_hash_sys_bytes + - go_memstats_frees_total + - go_memstats_gc_sys_bytes + - go_memstats_heap_alloc_bytes + - go_memstats_heap_idle_bytes + - go_memstats_heap_inuse_bytes + - go_memstats_heap_objects + - go_memstats_heap_released_bytes + - go_memstats_heap_sys_bytes + - go_memstats_last_gc_time_seconds + - go_memstats_lookups_total + - go_memstats_mallocs_total + - go_memstats_mcache_inuse_bytes + - go_memstats_mcache_sys_bytes + - go_memstats_mspan_inuse_bytes + - go_memstats_mspan_sys_bytes + - go_memstats_next_gc_bytes + - go_memstats_other_sys_bytes + - go_memstats_stack_inuse_bytes + - go_memstats_stack_sys_bytes + - go_memstats_sys_bytes + - go_sched_gomaxprocs_threads + - gpu_cache_usage_perc + - gpu_total_energy_consumption_joules + - http.server.active_requests + - num_request_max + - num_requests_running + - num_requests_waiting + - process_cpu_seconds_total + - process_max_fds + - process_open_fds + - process_resident_memory_bytes + - process_start_time_seconds + - process_virtual_memory_bytes + - process_virtual_memory_max_bytes + - promhttp_metric_handler_requests_in_flight + - promhttp_metric_handler_requests_total + - prompt_tokens_total + - python_gc_collections_total + - python_gc_objects_collected_total + - python_gc_objects_uncollectable_total + - python_info + - request_finish_total + - request_success_total + - system.cpu.time + - e2e_request_latency_seconds + - time_to_first_token_seconds + - time_per_output_token_seconds + - request_prompt_tokens + - request_generation_tokens +``` + +先ほど追加した `metrics/nvidia-metrics` パイプラインに `filter/metrics_to_be_included` プロセッサーが含まれていることを確認します。 + +``` bash + service: + pipelines: + metrics/nvidia-metrics: + exporters: + - signalfx + processors: + - memory_limiter + - filter/metrics_to_be_included + - batch + - resourcedetection + - resource + receivers: + - receiver_creator/nvidia +``` + +## 変更の確認 + +修正した `otel-collector-values.yaml` ファイルの内容を `otel-collector-values-with-nvidia.yaml` ファイルと比較してください。 +必要に応じてファイルを更新し、内容が一致することを確認してください。`yaml` ファイルではインデントが重要であり、正確である必要があることを忘れないでください。 + +OpenShift 環境では Collector の再起動に約 3 分かかるため、すべての設定変更が完了するまで再起動は待ちます。 diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/5-monitor-vector-db.md b/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/5-monitor-vector-db.md new file mode 100644 index 0000000000..39d939a237 --- /dev/null +++ b/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/5-monitor-vector-db.md @@ -0,0 +1,105 @@ +--- +title: ベクターデータベースのモニタリング +linkTitle: 5. ベクターデータベースのモニタリング +weight: 5 +time: 5 minutes +--- + +このステップでは、Weaviate ベクターデータベースをモニタリングするために Prometheus レシーバーを設定します。 + +## ベクターデータベースとは? + +**ベクターデータベース** は、テキストや画像などの情報の **意味的な意味** を捉えた数値的な「ベクター埋め込み」としてデータを保存し、インデックス化します。従来のデータベースとは異なり、完全一致ではなく概念的に関連するデータポイントを見つける **類似性検索** に優れています。 + +## ベクターデータベースはどのように使用されるのか? + +ベクターデータベースは、Large Language Models(LLM)を活用するアプリケーションで広く使用されている **Retrieval Augmented Generation(RAG)** と呼ばれるパターンにおいて重要な役割を果たします。 + +パターンは以下の通りです: + +* エンドユーザーがアプリケーションに質問します +* アプリケーションはその質問を受け取り、ベクター埋め込みを計算します +* アプリケーションは類似性検索を実行し、ベクターデータベース内の関連ドキュメントを探します +* アプリケーションは元の質問と関連ドキュメントをコンテキストとして LLM に送信します +* LLM はコンテキストを確認し、アプリケーションにレスポンスを返します + +## Prometheus で Weaviate メトリクスを取得する + +OpenTelemetry Collector の設定を変更して、Weaviate の Prometheus メトリクスをスクレイプしましょう。 + +`otel-collector-values.yaml` ファイルに追加の Prometheus レシーバークリエーターセクションを追加します: + +``` yaml + receiver_creator/weaviate: + # Name of the extensions to watch for endpoints to start and stop. + watch_observers: [ k8s_observer ] + receivers: + prometheus/weaviate: + config: + config: + scrape_configs: + - job_name: weaviate-metrics + scrape_interval: 60s + static_configs: + - targets: + - '`endpoint`:2112' + rule: type == "pod" && labels["app"] == "weaviate" +``` + +Weaviate のメトリクスが `filter/metrics_to_be_included` フィルタープロセッサーの設定にも追加されていることを確認する必要があります: + +``` yaml + processors: + filter/metrics_to_be_included: + metrics: + # Include only metrics used in charts and detectors + include: + match_type: strict + metric_names: + - DCGM_FI_DEV_FB_FREE + - ... + - object_count + - vector_index_size + - vector_index_operations + - vector_index_tombstones + - vector_index_tombstone_cleanup_threads + - vector_index_tombstone_cleanup_threads + - requests_total + - objects_durations_ms_sum + - objects_durations_ms_count + - batch_delete_durations_ms_sum + - batch_delete_durations_ms_count +``` + +また、設定ファイルに以下の設定で Resource プロセッサーを追加します: + +``` yaml + resource/weaviate: + attributes: + - key: weaviate.instance.id + from_attribute: service.instance.id + action: insert +``` + +このプロセッサーは、Weaviate メトリクスの `service.instance.id` プロパティを取得し、`weaviate.instance.id` という新しいプロパティにコピーします。これにより、Splunk Observability Cloud で標準的な OpenTelemetry プロパティとして使用される `service.instance.id` を持つ他のメトリクスと、Weaviate メトリクスをより簡単に区別できるようになります。 + +Weaviate メトリクス用の新しいメトリクスパイプラインも追加する必要があります(Weaviate 以外のメトリクスに `weaviate.instance.id` メトリクスが追加されないように、別のパイプラインを使用する必要があります): + +``` yaml + metrics/weaviate: + exporters: + - signalfx + processors: + - memory_limiter + - filter/metrics_to_be_included + - resource/weaviate + - batch + - resourcedetection + - resource + receivers: + - receiver_creator/weaviate +``` + +変更した `otel-collector-values.yaml` ファイルの内容を `otel-collector-values-with-weaviate.yaml` ファイルと比較してください。内容が一致するように、必要に応じてファイルを更新してください。`yaml` ファイルではインデントが重要であり、正確である必要があることを忘れないでください。 + +OpenShift 環境では Collector の再起動に約3分かかるため、すべての設定変更が完了するまで再起動は待ちます。 diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/6-monitor-storage.md b/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/6-monitor-storage.md new file mode 100644 index 0000000000..341ffd1d8f --- /dev/null +++ b/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/6-monitor-storage.md @@ -0,0 +1,88 @@ +--- +title: ストレージのモニタリング +linkTitle: 6. ストレージのモニタリング +weight: 6 +time: 5 minutes +--- + +このステップでは、ストレージをモニタリングするために Prometheus レシーバーを設定します。 + +## Cisco AI PODs はどのようなストレージを使用しているか? + +Cisco AI PODs には、Pure Storage、VAST、NetApp など、さまざまなストレージオプションがあります。 + +このワークショップでは Pure Storage に焦点を当てます。 + +## Pure Storage メトリクスをどのように取得するか? + +Pure Storage を使用する Cisco AI PODs は、Kubernetes に永続ストレージを提供する Portworx というテクノロジーも使用しています。 + +Portworx には Prometheus レシーバーでスクレイプできるメトリクスエンドポイントがあります。 + +## Prometheus でストレージメトリクスを取得する + +OpenTelemetry Collector の設定を変更して、Prometheus レシーバーで Portworx メトリクスをスクレイプしましょう。 + +`otel-collector-values.yaml` ファイルに追加の Prometheus レシーバークリエーターセクションを追加します: + +``` yaml + receiver_creator/storage: + # Name of the extensions to watch for endpoints to start and stop. + watch_observers: [ k8s_observer ] + receivers: + prometheus/portworx: + config: + config: + scrape_configs: + - job_name: portworx-metrics + static_configs: + - targets: + - '`endpoint`:17001' + - '`endpoint`:17018' + rule: type == "pod" && labels["app"] == "portworx-metrics-sim" +``` + +Portworx メトリクスが `filter/metrics_to_be_included` フィルタープロセッサーの設定にも追加されていることを確認する必要があります: + +``` yaml + processors: + filter/metrics_to_be_included: + metrics: + # Include only metrics used in charts and detectors + include: + match_type: strict + metric_names: + - DCGM_FI_DEV_FB_FREE + - ... + - px_cluster_cpu_percent + - px_cluster_disk_total_bytes + - px_cluster_disk_utilized_bytes + - px_cluster_status_nodes_offline + - px_cluster_status_nodes_online + - px_volume_read_latency_seconds + - px_volume_reads_total + - px_volume_readthroughput + - px_volume_write_latency_seconds + - px_volume_writes_total + - px_volume_writethroughput +``` + +Portworx メトリクス用の新しいメトリクスパイプラインも追加する必要があります: + +``` yaml + metrics/storage: + exporters: + - signalfx + processors: + - memory_limiter + - filter/metrics_to_be_included + - batch + - resourcedetection + - resource + receivers: + - receiver_creator/storage +``` + +変更した `otel-collector-values.yaml` ファイルの内容を `otel-collector-values-with-portworx.yaml` ファイルと比較してください。内容が一致するように、必要に応じてファイルを更新してください。`yaml` ファイルではインデントが重要であり、正確である必要があることを忘れないでください。 + +OpenShift 環境では Collector の再起動に約3分かかるため、すべての設定変更が完了するまで再起動は待ちます。 diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/7-review-ai-pod-dashboards.md b/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/7-review-ai-pod-dashboards.md new file mode 100644 index 0000000000..a800b9f83a --- /dev/null +++ b/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/7-review-ai-pod-dashboards.md @@ -0,0 +1,46 @@ +--- +title: AI POD ダッシュボードの確認 +linkTitle: 7. AI POD ダッシュボードの確認 +weight: 7 +time: 10 minutes +--- + +このセクションでは、Splunk Observability Cloud の AI POD ダッシュボードを確認し、NVIDIA、Pure Storage、および Weaviate からのデータが期待通りに取得されていることを確認します。 + +## OpenTelemetry Collector の設定を更新する + +以下の Helm コマンドを実行して、Collector の設定変更を適用できます: + +``` bash +helm upgrade splunk-otel-collector \ + --set="clusterName=$CLUSTER_NAME" \ + --set="environment=$ENVIRONMENT_NAME" \ + --set="splunkObservability.accessToken=$ACCESS_TOKEN" \ + --set="splunkObservability.realm=$REALM" \ + --set="splunkPlatform.endpoint=$HEC_URL" \ + --set="splunkPlatform.token=$HEC_TOKEN" \ + --set="splunkPlatform.index=$SPLUNK_INDEX" \ + -f ./otel-collector-values.yaml \ + -n $USER_NAME \ + splunk-otel-collector-chart/splunk-otel-collector +``` + +## AI POD 概要ダッシュボードタブの確認 + +Splunk Observability Cloud で `Dashboards` に移動し、`Built-in dashboard groups` に含まれている `Cisco AI PODs Dashboard` を検索してください。ダッシュボードが OpenShift クラスター名でフィルタリングされていることを確認してください。チャートは以下の例のように表示されるはずです: + +![Kubernetes Pods](../../images/Cisco-AI-Pod-dashboard.png) + +## Pure Storage ダッシュボードタブの確認 + +`PURE STORAGE` タブに移動し、ダッシュボードが OpenShift クラスター名でフィルタリングされていることを確認してください。チャートは以下の例のように表示されるはずです: + +![Pure Storage Dashboard](../../images/PureStorage.png) + +## Weaviate Infrastructure Navigator の確認 + +Weaviate は AI POD にデフォルトで含まれていないため、すぐに使える AI POD ダッシュボードには含まれていません。代わりに、Infrastructure Navigator の1つを使用して Weaviate のパフォーマンスデータを確認できます。 + +Splunk Observability Cloud で `Infrastructure` -> `AI Frameworks` -> `Weaviate` に移動してください。対象の `k8s.cluster.name` でフィルタリングし、以下の例のように Navigator が表示されていることを確認してください: + +![Kubernetes Pods](../../images/WeaviateNavigator.png) diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/8-review-llm-app.md b/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/8-review-llm-app.md new file mode 100644 index 0000000000..b2cc577be9 --- /dev/null +++ b/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/8-review-llm-app.md @@ -0,0 +1,110 @@ +--- +title: LLM アプリケーションの確認 +linkTitle: 8. LLM アプリケーションの確認 +weight: 8 +time: 15 minutes +--- + +ワークショップの最後のステップでは、instruct モデルと embeddings モデルを使用するアプリケーションを OpenShift クラスターにデプロイします。 + +## LangChain とは? + +LLM とやり取りするほとんどのアプリケーションと同様に、このアプリケーションは Python で書かれています。また、LLM を活用したアプリケーションの開発を簡素化するオープンソースのオーケストレーションフレームワークである [LangChain](https://www.langchain.com/) を使用しています。 + +## アプリケーション概要 + +### LLM への接続 + +アプリケーションはまず、使用する2つの LLM に接続します: + +* `meta/llama-3.2-1b-instruct`:ユーザーのプロンプトへの応答に使用 +* `nvidia/llama-3.2-nv-embedqa-1b-v2`:埋め込みの計算に使用 + +``` python +# connect to a LLM NIM at the specified endpoint, specifying a specific model +llm = ChatNVIDIA(base_url=INSTRUCT_MODEL_URL, model="meta/llama-3.2-1b-instruct") + +# Initialize and connect to a NeMo Retriever Text Embedding NIM (nvidia/llama-3.2-nv-embedqa-1b-v2) +embeddings_model = NVIDIAEmbeddings(model="nvidia/llama-3.2-nv-embedqa-1b-v2", + base_url=EMBEDDINGS_MODEL_URL) +``` +> なぜ2つのモデルがあるのでしょうか?以下のたとえが参考になります: +> * Embedding モデルは「図書館員」です(適切な本を見つける手助けをします) +> * Instruct モデルは「作家」です(本を読み、答えを書きます) + +### プロンプトテンプレートの定義 + +アプリケーションは次に、`meta/llama-3.2-1b-instruct` LLM とのやり取りで使用するプロンプトテンプレートを定義します: + +``` python +prompt = ChatPromptTemplate.from_messages([ + ("system", + "You are a helpful and friendly AI!" + "Your responses should be concise and no longer than two sentences." + "Do not hallucinate. Say you don't know if you don't have this information." + "Answer the question using only the context" + "\n\nQuestion: {question}\n\nContext: {context}" + ), + ("user", "{question}") +]) +``` + +> LLM に対して、答えがわからない場合はわからないと言うように明示的に指示していることに注目してください。これはハルシネーションを最小限に抑えるのに役立ちます。また、LLM が質問に答えるために使用できるコンテキストを提供するためのプレースホルダーもあります。 + +### ベクターデータベースへの接続 + +アプリケーションは次に、NVIDIA のデータシートドキュメントが事前に格納されたベクターデータベースに接続します: + +``` python + weaviate_client = weaviate.connect_to_custom( + http_host=os.getenv('WEAVIATE_HTTP_HOST'), + http_port=os.getenv('WEAVIATE_HTTP_PORT'), + http_secure=False, + grpc_host=os.getenv('WEAVIATE_GRPC_HOST'), + grpc_port=os.getenv('WEAVIATE_GRPC_PORT'), + grpc_secure=False + ) + + vector_store = WeaviateVectorStore( + client=weaviate_client, + embedding=embeddings_model, + index_name="CustomDocs", + text_key="page_content" + ) +``` + +### チェーンの定義 + +アプリケーションは **LCEL(LangChain Expression Language)** を使用してチェーンを定義します。`|`(パイプ)記号はアセンブリラインのように機能し、あるステップの出力が次のステップの入力になります。 + +``` python + chain = ( + { + "context": vector_store.as_retriever(), + "question": RunnablePassthrough() + } + | prompt + | llm + | StrOutputParser() + ) +``` + +これをステップごとに分解してみましょう: + +* **ステップ1:入力マップ {…}**:プロンプトの材料を準備しています。 + * context:ベクターストアをリトリーバーに変換します。これはユーザーの質問に基づいて、NVIDIA データシートから最も関連性の高いスニペットを見つける検索エンジンのように機能します。 + * question:RunnablePassthrough() を使用して、ユーザーの元の質問がそのままプロンプトに渡されるようにします。 + * **注意**:これらのキー(context と question)は、先ほど定義したプロンプトテンプレートの {context} と {question} プレースホルダーに直接対応しています。 +* **ステップ2:prompt**:これは指示書です。context と question を受け取り、プロンプトテンプレートを使用してフォーマットします(例:「コンテキストのみを使用して質問に答えてください...」)。 +* **ステップ3:llm**:これは「エンジン」です(GPT-4 のようなもの)。フォーマットされたプロンプトを読み取り、レスポンスを生成します。 +* **ステップ4:StrOutputParser()**:デフォルトでは、AI モデルは複雑なオブジェクトを返します。この「クリーナー」により、シンプルで読みやすいテキスト文字列が返されるようになります。 + +### チェーンの実行 + +最後に、アプリケーションはエンドユーザーの質問を入力として渡してチェーンを実行します: + +``` python + response = chain.invoke(question) +``` + +これが「スタート」ボタンです。エンドユーザーの質問をパイプラインの最初に投入すると、リトリーバー、プロンプト、LLM を経由して、最終的に答えが出力されます。 diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/9-instrument-llm-app.md b/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/9-instrument-llm-app.md new file mode 100644 index 0000000000..79b0c3525a --- /dev/null +++ b/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/9-instrument-llm-app.md @@ -0,0 +1,78 @@ +--- +title: LLM アプリケーションの計装 +linkTitle: 9. LLM アプリケーションの計装 +weight: 9 +time: 10 minutes +--- + +## OpenTelemetry によるアプリケーションの計装 + +### 計装パッケージ + +アプリケーションからメトリクス、トレース、およびログを取得するために、OpenTelemetry で計装を行いました。 +これには、`requirements.txt` ファイルに以下のパッケージを追加する必要がありました(最終的に `pip install` でインストールされます): + +```` +splunk-opentelemetry==2.8.0 +```` + +また、このアプリケーションのコンテナイメージをビルドするために使用する `Dockerfile` に、追加の OpenTelemetry 計装パッケージをインストールする以下の記述を追加しました: + +``` dockerfile +# Add additional OpenTelemetry instrumentation packages +RUN opentelemetry-bootstrap --action=install +``` + +次に、`Dockerfile` の `ENTRYPOINT` を変更し、アプリケーション実行時に `opentelemetry-instrument` を呼び出すようにしました: + +``` dockerfile +ENTRYPOINT ["opentelemetry-instrument", "flask", "run", "-p", "8080", "--host", "0.0.0.0"] +``` + +最後に、この LangChain アプリケーションから OpenTelemetry で収集されるトレースとメトリクスを強化するために、追加の Splunk 計装パッケージを追加しました: + +```` +splunk-otel-instrumentation-langchain==0.1.4 +splunk-otel-util-genai==0.1.4 +```` + +### 環境変数 + +OpenTelemetry でアプリケーションを計装するために、アプリケーションのデプロイに使用する Kubernetes マニフェストファイルにいくつかの環境変数も含めました: + +``` yaml + env: + - name: OTEL_SERVICE_NAME + value: "llm-app" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: "http://splunk-otel-collector-agent:4317" + - name: OTEL_EXPORTER_OTLP_PROTOCOL + value: "grpc" + # filter out health check requests to the root URL + - name: OTEL_PYTHON_EXCLUDED_URLS + value: "^(https?://)?[^/]+(/)?$" + - name: OTEL_PYTHON_DISABLED_INSTRUMENTATIONS + value: "httpx,requests" + - name: OTEL_INSTRUMENTATION_LANGCHAIN_CAPTURE_MESSAGE_CONTENT + value: "true" + - name: OTEL_LOGS_EXPORTER + value: "otlp" + - name: OTEL_PYTHON_LOG_CORRELATION + value: "true" + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: "delta" + - name: OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED + value: "true" + - name: OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT + value: "true" + - name: OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT_MODE + value: "SPAN_AND_EVENT" + - name: OTEL_INSTRUMENTATION_GENAI_EMITTERS + value: "span_metric_event,splunk" + - name: OTEL_INSTRUMENTATION_GENAI_EMITTERS_EVALUATION + value: "replace-category:SplunkEvaluationResults" + - name: SPLUNK_PROFILER_ENABLED + value: "true" +``` + +`OTEL_INSTRUMENTATION_LANGCHAIN_CAPTURE_MESSAGE_CONTENT` および `OTEL_INSTRUMENTATION_GENAI_*` 環境変数は、使用している LangChain 計装に固有のものです。 diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/_index.md b/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/_index.md new file mode 100644 index 0000000000..485fb3dc6b --- /dev/null +++ b/content/ja/ninja-workshops/14-cisco-ai-pods/2-workshop/_index.md @@ -0,0 +1,14 @@ +--- +title: ワークショップ +linkTitle: 2. ワークショップ +weight: 2 +--- + +このセクションには、ワークショップ参加者が実行する手順が含まれています: + +* Red Hat OpenShift クラスターへの **OpenTelemetry Collector** のデプロイを練習します。 +* インフラストラクチャメトリクスを取り込むために、コレクターに **Prometheus** レシーバーを追加する練習をします。 +* クラスター内の **Weaviate** ベクトルデータベースのモニタリングを練習します。 +* Prometheus を使用した **Pure Storage** メトリクスの収集を練習します。 +* 大規模言語モデル(LLM)と連携する Python サービスを **OpenTelemetry** でインストルメントする練習をします。 +* LLM と連携するアプリケーションのトレースで OpenTelemetry がキャプチャする詳細情報を理解します。 diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/_index.md b/content/ja/ninja-workshops/14-cisco-ai-pods/_index.md new file mode 100644 index 0000000000..f506827cba --- /dev/null +++ b/content/ja/ninja-workshops/14-cisco-ai-pods/_index.md @@ -0,0 +1,36 @@ +--- +title: Splunk Observability Cloud による Cisco AI Pods のモニタリング +linkTitle: Splunk Observability Cloud による Cisco AI Pods のモニタリング +weight: 14 +archetype: chapter +time: 2 minutes +authors: ["Derek Mitchell"] +description: This hands-on workshop demonstrates how to monitor Cisco AI Pods with Splunk Observability Cloud. Learn to deploy the OpenTelemetry Collector in Red Hat OpenShift, ingest infrastructure metrics using Prometheus receivers, and configure APM to monitor Python services that interact with Large Language Models (LLMs). +draft: false +hidden: false +--- + +**Cisco の AI 対応 PODs** は、ハードウェアとソフトウェアの最高の技術を組み合わせ、多様なニーズに合わせた堅牢でスケーラブルかつ効率的な AI 対応インフラストラクチャを構築します。 + +**Splunk Observability Cloud** は、このインフラストラクチャ全体と、このスタック上で実行されるすべてのアプリケーションコンポーネントに対する包括的な可視性を提供します。 + +Cisco AI POD 環境向けに Splunk Observability Cloud を構成する手順は完全に文書化されています(詳細は [こちら](https://github.com/signalfx/splunk-opentelemetry-examples/tree/main/collector/cisco-ai-ready-pods) を参照してください)。 + +ただし、インストール手順を練習するために Cisco AI POD 環境にアクセスできるとは限りません。 + +このワークショップでは、実際の Cisco AI POD にアクセスすることなく、Splunk Observability Cloud で Cisco AI PODs をモニタリングするために使用されるいくつかの技術をデプロイし、操作するハンズオン体験を提供します。以下の内容が含まれます: + +* Red Hat OpenShift クラスターへの **OpenTelemetry Collector** のデプロイを練習します。 +* インフラストラクチャメトリクスを取り込むために、コレクターに **Prometheus** レシーバーを追加する練習をします。 +* クラスターへの **Weaviate** ベクトルデータベースのデプロイを練習します。 +* 大規模言語モデル(LLM)と連携する Python サービスを **OpenTelemetry** でインストルメントする練習をします。 +* LLM と連携するアプリケーションのトレースで OpenTelemetry がキャプチャする詳細情報を理解します。 + +> 注意:ワークショップセットアップセクションは、ワークショップ主催者のみが実行する必要があります + +{{% notice title="ヒント" style="primary" icon="lightbulb" %}} +このワークショップを最も簡単にナビゲートする方法は以下の通りです: + +* このページの右上にある左右の矢印( **<** | **>** )を使用する +* キーボードの左(◀️)および右(▶️)カーソルキーを使用する + {{% /notice %}} diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/images/Cisco-AI-Pod-dashboard.png b/content/ja/ninja-workshops/14-cisco-ai-pods/images/Cisco-AI-Pod-dashboard.png new file mode 100644 index 0000000000..fb25c6c6c7 Binary files /dev/null and b/content/ja/ninja-workshops/14-cisco-ai-pods/images/Cisco-AI-Pod-dashboard.png differ diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/images/DocumentRetrieval.png b/content/ja/ninja-workshops/14-cisco-ai-pods/images/DocumentRetrieval.png new file mode 100644 index 0000000000..5329d5ef97 Binary files /dev/null and b/content/ja/ninja-workshops/14-cisco-ai-pods/images/DocumentRetrieval.png differ diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/images/KubernetesPods.png b/content/ja/ninja-workshops/14-cisco-ai-pods/images/KubernetesPods.png new file mode 100644 index 0000000000..49777f4363 Binary files /dev/null and b/content/ja/ninja-workshops/14-cisco-ai-pods/images/KubernetesPods.png differ diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/images/LLMResponse.png b/content/ja/ninja-workshops/14-cisco-ai-pods/images/LLMResponse.png new file mode 100644 index 0000000000..9c4f5d3fcd Binary files /dev/null and b/content/ja/ninja-workshops/14-cisco-ai-pods/images/LLMResponse.png differ diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/images/NIMLLM.png b/content/ja/ninja-workshops/14-cisco-ai-pods/images/NIMLLM.png new file mode 100644 index 0000000000..b4537ffdaa Binary files /dev/null and b/content/ja/ninja-workshops/14-cisco-ai-pods/images/NIMLLM.png differ diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/images/NVIDIA-Subscriptions.png b/content/ja/ninja-workshops/14-cisco-ai-pods/images/NVIDIA-Subscriptions.png new file mode 100644 index 0000000000..7ecfa1f27b Binary files /dev/null and b/content/ja/ninja-workshops/14-cisco-ai-pods/images/NVIDIA-Subscriptions.png differ diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/images/OperatorInstall.png b/content/ja/ninja-workshops/14-cisco-ai-pods/images/OperatorInstall.png new file mode 100644 index 0000000000..93e1736384 Binary files /dev/null and b/content/ja/ninja-workshops/14-cisco-ai-pods/images/OperatorInstall.png differ diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/images/PromptTemplate.png b/content/ja/ninja-workshops/14-cisco-ai-pods/images/PromptTemplate.png new file mode 100644 index 0000000000..731182c52c Binary files /dev/null and b/content/ja/ninja-workshops/14-cisco-ai-pods/images/PromptTemplate.png differ diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/images/PureStorage.png b/content/ja/ninja-workshops/14-cisco-ai-pods/images/PureStorage.png new file mode 100644 index 0000000000..b1b4164034 Binary files /dev/null and b/content/ja/ninja-workshops/14-cisco-ai-pods/images/PureStorage.png differ diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/images/ServiceMap.png b/content/ja/ninja-workshops/14-cisco-ai-pods/images/ServiceMap.png new file mode 100644 index 0000000000..d92da2389b Binary files /dev/null and b/content/ja/ninja-workshops/14-cisco-ai-pods/images/ServiceMap.png differ diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/images/Trace.png b/content/ja/ninja-workshops/14-cisco-ai-pods/images/Trace.png new file mode 100644 index 0000000000..ac39537621 Binary files /dev/null and b/content/ja/ninja-workshops/14-cisco-ai-pods/images/Trace.png differ diff --git a/content/ja/ninja-workshops/14-cisco-ai-pods/images/WeaviateNavigator.png b/content/ja/ninja-workshops/14-cisco-ai-pods/images/WeaviateNavigator.png new file mode 100644 index 0000000000..a637007144 Binary files /dev/null and b/content/ja/ninja-workshops/14-cisco-ai-pods/images/WeaviateNavigator.png differ