2023年08月

25

【てくさぽBLOG】IBM Cloud Schematicsを使ってPower Virtual Serverをプロビジョニングしてみた

こんにちは。
てくさぽBLOGメンバーの高村です。

今回は IBM Cloud Schematics(以下 Schematics)を利用して IBM Power Virtual Server のプロビジョニングを検証してみました。

IBM Cloud Schematics とは、Infrastructure as a Code(以下 IaC)を提供する IBM Cloud のマネージドサービスです。
IaC や Schematics などについてご存じでない方もいらっしゃると思いますので、順番にご紹介します。

IaCとは?

IaC はインフラストラクチャの設定や管理をコードで行うアプローチです。
具体的には、サーバーやネットワークなどのインフラストラクチャをコードで定義し、必要な時に実行し展開・変更することができます。

IaC を利用するメリットとしては以下が挙げられます。

  • 構築・管理の効率化:
    インフラストラクチャをコードとして管理することで構築・管理を自動化することができます。またコードを再利用することもできるため、複数の環境に対して同じ構成やリソース追加を効率的に構築することができます。
  • 共有の容易化:
    IaC は通常、ソースコード管理システム(Githubなど)を使用してコードを管理します。これにより、チームメンバーとの共有・変更の管理が容易になります。
  • 人為的ミスの削減:
    人為的なミスのリスクが減り、変更の管理やインフラストラクチャの状態の監視も容易になります。

以下はコードが実行される流れを表した図です。
作業者がコードを作成し、そのコードを Gitリポジトリなどにアップロードすると構成管理ツールによってコードが実行され、自動的に環境が構築される流れになります。

コードが実行される流れ

IaC を実現するためには構成管理ツールを利用します。
代表的なツールとしては「Terraform」「Ansible」「chef」などがあります。
以下に簡単にご紹介します。

  • Terraform:
    インフラストラクチャのコードを記述することで、インフラストラクチャの作成、構成、および変更を自動化します。Terraform は主に IaaS に焦点を当てており、インフラストラクチャの構成及び状態の管理に使用されます。
  • Ansible:
    構成管理、アプリケーションのデプロイ、タスクのオーケストレーションなど、幅広い自動化タスクに使用されるツールです。主に構成管理とアプリケーションのデプロイに使用されます。
  • Chef:
    Chefサーバーとクライアントを使用して設定を管理します。主にシステム設定やソフトウェアの導入などの自動化に使用されます。

ツール毎に得意とする分野があり、使用目的や環境に応じて使い分けられています。
これからご紹介する Schematics は上記の Terraform や Ansible の機能を統合し、IBM Cloud環境での IaC を実現するマネージドサービスです。

Schematicsとは?

Schematics は IBM Cloud のサービスの一つとして提供されるマネージドサービスです。

Schematics自体は無償サービスで、プロビジョニングしたリソースに対し費用が発生します。
2023年8月時点で、Schematics自体のリソースは北アメリカやヨーロッパなど一部の地域に作成されます。
ただし IBM Cloud のリソースを作成する場合は、Schematics のロケーションに関係なくどこでも作成することができます。

Schematics は大きく分けて3つの機能を利用することができます。

  • Schematicsワークスペース:
    Terraform の機能を利用し、IBM Cloud環境へのリソースのプロビジョニングと構成の管理の自動化を行います。
  • Schematicsアクション:
    Ansible as a Service機能を利用し、構成の管理及びアプリケーションを IBM Cloud環境にデプロイします。
  • Schematics Blueprints(2023年8月現在ベータ版):
    定義したインフラコードをモジュールとして取り扱い、組み合わせることで大規模環境をデプロイします。

Schematicsワークスペースと Schematicsアクションの使い分けとしては、リソースのプロビジョニングは Schematicsワークスペースを利用し、ソフトウェアのデプロイや設定管理には Schematicsアクションを利用することが推奨されています。

Schematicsワークスペースと Schematicsアクションの使い分

今回の検証では、Schematicsワークスペースを利用した Power Virtual Server のプロビジョニングをご紹介いたします。

検証の概要

Schematicsワークスペースの利用シーンとしては、複数の区画をプロビジョニングしたり、構成変更や別環境へ同一構成をプロビジョニングすることなどが考えられます。

今回の検証では Power Virtual Server を東京リージョンにプロビジョニングし、メモリ容量を変更を行います。
また、大阪リージョンにも同じ区画をプロビジョニングしていきます。

なお、事前に Power Virtual Server のワークスペースを東京と大阪に作成しておきます。
ワークスペースの作成方法につきましては「【やってみた】IBM Power Virtual ServerのAIX環境とIBM Cloud Object Storageを接続してみた -Part1-」の「2) IBM Power Virtual Serverの作成」をご参照ください。

以下は検証の構成図です。
コードは Github のプライベートリポジトリに配置します。外部のソースコード管理ツールを使用したくない場合は IBM Cloud Toolchain の Gitlab を利用することも可能です。

検証の構成図

Githubの設定

プライベートリポジトリの作成

Github の使用は初めてなので、アカウントやリポジトリ作成方法は Web で検索しました。
以下の画面は Github のトップ画面です。デザインがカッコいいですね。

Github のトップ画面

アカウントを作成し、ダッシュボード画面に入ります。
コードは外部公開しない想定のため、プライベートリポジトリを使用します。
任意のリポジトリ名を入力、[Private] を選択し [Create a new repository] をクリックします。

ダッシュボード画面

プライベートリポジトリが作成できました。
作成したリポジトリにコードを配置していきます。

プライベートリポジトリ

コードの作成

Power Virtual Server をプロビジョニングするためのコードですが、こちらの Github に「サンプルコード」が公開されています。5つのコードファイルがありますが全て使用します。
以下各コードファイルの説明です。

  • README.md:Readmeファイル
  • main.tf   :インフラ定義を記述するファイル
  • provider.tf :対象のクラウドなどの情報を記述するファイル(リージョンなども記述)
  • variable.tf :変数を記述するファイル
  • versions.tf :使用するモジュールとバージョンの組み合わせを記述

プライベートリポジトリの画面に戻り、[Add file] から [Create new file] をクリックします。

プライベートリポジトリ画面

ファイル名を入力し、サンプルコードをコピー&ペーストします。最後に [Commit change] をクリックします。

サンプルコードをコピー&ペースト

5つのコードファイルを作成しました。

5つのコードファイル

コードの編集

検証では以下構成の Power Virtual Server をプロビジョニングしていきます。

  • リージョン:東京
  • インスタンス名:test_AIX
  • OS:AIX V7.3
  • CPUタイプ:Uncapped Shared
  • CPU:0.25
  • メモリ:2GB
  • ストレージタイプ:Tier3
  • 外部ディスク名:dg
  • 外部ディスクサイズ:1GB
  • NW名:pvs_test_nw

サンプルコードのままでは上記の構成を作成することはできないため、変数ファイル「variable.tf」を編集する必要があります。
main.tf、provider.tf は variable.tf の値をみて動きますので特に編集は不要です。versions.tf は変更無し、README.md は適宜編集します。

以下は variable.tf の内容です。
各パラメータの説明は割愛いたしますが、ピンク字①~③の値の確認方法は下にご紹介します。

// Service / Account
variable “ibm_cloud_api_key” {
description = “API Key”
type = string
default = “XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
}<①
variable “region” {
description = “Reigon of Service”
type = string
default = “tok
}
variable “zone” {
description = “Zone of Service”
type = string
default = “tok04
}
variable “cloud_instance_id” {
description = “Cloud Instance ID of Service”
type = string
default = “XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
}<②// Image
variable “image_name” {
description = “Name of the image to be used”
type = string
default = “XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
}<③// Instance
variable “instance_name” {
description = “Name of the instance”
type = string
default = “test_AIX
}
variable “memory” {
description = “Instance memory”
type = number
default = 2
}
variable “processors” {
description = “Instance processors”
type = number
default = 0.25
}
variable “proc_type” {
description = “Instance ProcType”
type = string
default = “shared
}
variable “storage_type” {
description = “The storage type to be used”
type = string
default = “tier3
}
variable “sys_type” {
description = “Instance System Type”
type = string
default = “s922
}// SSH Key
variable “ssh_key_name” {
description = “Name of the ssh key to be used”
type = string
default = “ssh_20230719
}
variable “ssh_key_rsa” {
description = “Public ssh key”
type = string
default = “XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
}<公開鍵を入力// Network
variable “network_name” {
description = “Name of the network”
type = string
default = “pvs_test_nw
}
variable “network_type” {
description = “Type of a network”
type = string
default = “pub-vlan”
}
variable “network_count” {
description = “Number of networks to provision”
type = number
default = 1
}// Volume
variable “volume_name” {
description = “Name of the volume”
type = string
default = “dg
}
variable “volume_size” {
description = “Size of a volume”
type = number
default = 1
}
variable “volume_shareable” {
description = “Is a volume shareable”
type = bool
default = false
}
variable “volume_type” {
description = “Type of a volume”
type = string
default = “tier3
}

ピンク字①~③の値の確認方法は以下です。

①APIキー

APIキーの作成方法は「APIキーの作成方法」(IBMサイト)をご参照ください。
作成したAPIキーを控えます。

②クラウドインスタンスID

IBM Cloudリソースリストから Power Virtual Server のワークスペースを選択すると GUID が表示されるので控えます。

クラウドインスタンスID

③イメージID

IBM Cloud Shell からコマンドを実行してブートイメージのイメージIDを取得します。
Cloud Shell は管理コンソール画面の右上のアイコンから入ります。

イメージID

Cloud Shell で以下コマンドを実行します。


$ ibmcloud pi servicelist  <ワークスペースのcrnが表示されます
$ ibmcloud pi service-target crn:XXXXXXXX <表示された対象ワークスペースのcrnを入力します
$ ibmcloud pi images <イメージIDが表示されるのでIDを控えます


以下は出力結果画面です。
マスキングが多く申し訳ございませんが、ご参考ください。

出力結果画面

これでコードの編集が完了しました。
サンプルコードが提供されているので、variable.tf の変数を編集すれば目的のコードを作ることができますね。

トークンの取得

Schematics から Github のプライベートリポジトリにアクセスする際にパーソナルアクセストークンが必要となるため、Github からパーソナルアクセストークンを取得します。
メニューから [Settings] をクリックします。

パーソナルアクセストークン取得

左側メニューの [<>Developer settings] をクリックします。

<>Developer settings

[Tokens(classic)] をクリックします。

Tokens(classic)

[Generate new token(classic)] をクリックします。

Generate new token(classic)

[Note] に適宜入力し、[Expiration] を30日に設定し、”Select scopes” では [repo] にチェックを入れます。画面を下にスクロールし、[Generate token] をクリックします。

Generate token

パーソナルアクセストークンが作成できました。
後程Schematicsワークスペースの作成で必要になるためメモ帳などに控えておきます。

パーソナルアクセストークン作成完了

リポジトリーのURL取得

プライベートリポジトリのURLを取得します。
リポジトリ画面に戻り [<>Code] をクリックし、[HTTPS] を選択して URL を控えておきます。

プライベートリポジトリのURL取得

これで Github の設定は完了しました。

Schematicsワークスペースの設定・プランの実行

Schematicsワークスペースの作成

Schematicsワークスペースから Power Virtual Server をプロビジョニングにしてみましょう。

IBM Cloud のカタログから “Schematics” を選択します。

Schematics

Schematics のホーム画面に入りました。
[ワークスペースの作成+] をクリックします。

ワークスペースの作成+

ワークスペース作成画面です。
[GithubのURL] にはプライベートリポジトリの URL、[パーソナル・アクセス・トークン] には Github で作成したトークンを入力します。[完全リポジトリーの使用] のチェックボックスはデフォルトままにします。[Terraformバージョン] は最新バージョンを指定して [次へ] をクリックします。

ワークスペース作成画面

[ワークスペース名] に任意の名前を入力し、[ローケーション] を北アメリカ/ロンドン/フランクフルトの中から選択し、[次へ] をクリックします。

ワークスペース名/ローケーション

設定値が表示されるので確認し、[作成] をクリックします。

設定値

約1分程でワークスペースが作成できました。
variable.tf の変数が読み込まれ、ワークスペースの変数に表示されています。

ワークスペース作成完了

[README] を選択すると、README.md が読み込まれていることがわかります。

README

Power Virtual Serverのプロビジョニング

右上の [プランの生成] をクリックし、コードのチェックを行います。

プランの生成

プランの生成が成功すると、[ジョブ] 画面に以下のように表示されます。

ジョブ

ちなみに失敗時は以下の画面が表示されます。
失敗した場合はエラーメッセージから原因を確認します。
ここでは記載しませんが、何回かプランの生成に失敗しコードを修正しました。

失敗時

コードを修正した場合は、[最新をプル] をクリックすると最新の状態にすることができます。

最新をプル

話がそれましたが、プランを適用してプロビジョニングを実行します。
[プランの適用] をクリックします。

プランの適用

進行状況は [ジョブ] から確認できます。

進行状況

適用が進んでいますね。

適用

約15分程でプランの適用が完了しました。

プランの適用完了

Power Virtual Server のワークスペースを確認すると、指定通りのインスタンスが作成されていました。

Power Virtual Server のワークスペース

指定通りのインスタンス

構成変更

Schematicsワークスペースにてメモリ容量を2GBから4GBへ変更します。
Github のコード編集ではなく、ワークスペースから変数を上書きすることができます。
ワークスペースの変数画面から [memory] の編集アイコンをクリックします。

memory

値を [4] にして [保存] をクリックします。
なお、デフォルト値に戻したいときは [デフォルトの使用] にチェックを入れて保存します。

デフォルトの使用

メモリの変数がデフォルトは2、オーバーライド値が4になりました。

メモリの変数/オーバーライド値

プランの生成、適用を行い正常に行われたことを確認します。

プランの生成、適用を行い正常に行われたことを確認

Power Virtual Server を確認するとサイズ変更が実行されていました。

サイズ変更

数分後、メモリが2GBから4GBに変更されたことを確認できました。

メモリ変更

大阪リージョンへプロビジョニング

東京リージョンに作成した区画と同じ構成を大阪リージョンに作成します。
リソース変更手順と同様にワークスペースの変数を編集します。
[region] を選択して [編集] をクリックします。

region

大阪リージョンの [osa] を入力して [保存] をクリックします。

osa

同様に、zone, cloud_instane_id, image_name の変数を大阪リージョンの値に上書きします。

zone / cloud_instane_id / image_name

変数の上書きをした後、プランの生成を行ったところ生成が失敗してしまいました。
ログをみると、イメージを Get できない内容のエラーが出力されています。

生成が失敗

しかし、変数のオーバーライド値には大阪リージョンの値を入力しています。Github のコードを編集して Schematicsワークスペースを更新してみましたが、同様のエラーで失敗しました。
プラン適用時に環境変数が残ってしまっているのかも?と考え、新たに大阪リージョンの用の Schematicsワークスペースを作成し、変数は大阪リージョンの値を登録しました。

大阪リージョンの用の Schematicsワークスペースを作成

プランの生成・適用を行ったところ、無事成功しました。
変数の値は間違っていないようです。

成功

大阪のワークスペースを確認すると、指定した構成で作成されていました。
Schematicsワークスペースはリージョン毎に分けた方が良いのかもしれません。

指定した構成で作成

以上で検証は完了です。

コード作成の経験がない私でも、Schematicsワークスペースから Power Virtual Server をプロビジョニングすることができました。
サンプルコードはカスタマイズや修正を行えば実行できたので、作業の難易度はそこまで高くありませんでした。

さいごに

いかがでしたでしょうか。

Schematicsワークスペースを利用して Power Virtual Server のプロビジョニング、構成変更、別環境へ同一構成のプロビジョニングを行いました。
コード作成はスキルが必要と思われる方も多いかと思いますが、サンプルコードが提供されているため初心者でも取り掛かりやすいと思います。

検証では1区画のみの作成でしたが、複数区画作成する場合は GUI で作業するよりもコードを定義し Schematicsワークスペースから実行した方が工数・ミスを削減できるのではと感じます。
また、ワークスペース上で変数のデフォルト値が保持されているため、デフォルト値に戻したい場合はクリック一つで設定を戻すことができ、デフォルト値がわからなくなるといったミスを防ぐことができます。

別環境へのプロビジョニングでは変数を上書きしてもプランを適用できなかったため、別リージョン専用のワークスペースを作成しました。
明らかな原因を突き止めることができなかったのですが、環境ごとに Schematicsワークスペースを分けた方が運用面では管理がしやすいですね。

また今回は検証しませんでしたが、ベータ版の Schematics Blueprints は定義したコードをモジュールとして取り扱い・組み合わせることで大規模環境をデプロイすることができる機能です。
例えば本番環境と同一構成を別リージョンに作成したい場合、通常は一つ一つリソースをプロビジョニングし別環境にも同じ作業を行います。
コードを定義し Schematics Blueprints を使用すればコードを組み合わせて環境をデプロイできるため、作業工数の削減が期待できます。

システムの構築は設計から始まり、構築、試験の実施、運用手順書の作成など多くの過程があり、長い時間と労力が必要です。
昨今 Schematics をはじめとする IaC の実現ツールが徐々に広まりつつありますが、これからは従来の構築作業がコードとツールを利用した作業や運用に移行していくかもしれません。

最新情報

2023年8月23日に Terraform バージョン0.x が2023年9月末で営業活動終了、2024年9月末にサポート終了されることが発表されました。
既存でバージョン0.xをご利用されている場合は2024年9月末までにバージョン1.x以上にアップグレードする必要があります。

Schematics に限らず、IBM Cloudサービスの営業活動終了/サポート終了などは定期的に発表されますので、留意してご利用いただくことが重要です。

お問い合わせ

この記事に関するご質問は下記までご連絡ください。

エヌアイシー・パートナーズ株式会社
E-Mail:nicp_support@NIandC.co.jp

 

その他の記事

2024年04月08日

【てくさぽBLOG】watsonx Assistant + Watson Discovery + watsonx.aiを連携してみた

こんにちは。てくさぽBLOGメンバーの高村です。 ビジネスへの生成AI の取り込みに注目が集まっている今日、watsonx.ai をどう活用すればいいのか、多くのお客様からお問い合わせ頂いています。そこで前回の「【てくさぽBLOG】IBM watsonx.aiを使ってみた(Part2)」では、watsonx.ai のユースケースとして Retrieval-Augmented Generation(以下 RAG)をご紹介しました。 今回は、RAG の仕組みを利用し AIチャットボットを提供する「watsonx Assistant(以下 Assistant)」と検索エンジン機能を提供する「Watson Discovery(以下 Discovery)」、「watsonx.ai」を組み合わせた連携ソリューションをご紹介します。 目次 AssistantとDiscoveryの連携 watsonx.aiを取り入れた連携 Assistant + Discovery + watsonx.aiを連携してみた さいごに お問い合わせ AssistantとDiscoveryの連携 本来なら各製品を一つのブログで詳しくご説明したいところですが、今回は連携した結果についてのご紹介となりますので、Assistant と Discovery については今後のブログであらためてご紹介したいと思います。 Assistant は watsonx の大規模言語モデルが搭載され、自然言語の問い合わせを理解し、適切な回答を返すことができるチャットボット機能を提供する製品です。一方 Discovery はドキュメントから適切な情報を検索する検索エンジン機能、パターンや傾向を読み取る分析エンジンとしての機能を備えた製品です。 Assistant と Discovery を組合わせたユースケースでは Assistant にあらかじめ回答を用意してルールベースで回答させ、答えることが難しい問い合わせに対しては Discovery の検索結果を利用して回答します。 watsonx.aiを取り入れた連携 上記の連携では Discovery の検索結果がユーザーに表示される仕組みとなっていますが、watsonx.ai を介して回答を提供することでDiscovery が得た検索結果をさらに整理し、より理解しやすい形での返答が実現できます。 Assistant + Discovery + watsonx.aiを連携してみた Assistant、Discovery、watsonx.ai を連携してみます。 事前準備 利用環境 今回は IBM Cloud で提供される SaaS を利用して検証します。なお、Assistant と Discovery の Plusプランは30日間無償期間が付属されていますので、是非ご活用ください。 watsonx Assistant:Plusプラン(30日間無償期間あり、以降は有償) Watson Discovery:Plusプラン(30日間無償期間あり、以降は有償) watsonx.ai:Essentialプラン(有償) 検証の目的 検証では構築手順の他、以下の点を確認します。 「Assistant + Discovery + watsonx.ai」と「Assistant + Discovery」の連携による回答の違いを比較 言語モデルを変えて問い合わせを行い、回答の違いの比較 実施手順 以下の流れで検証を実施します。 Assistantのプロビジョニング Discoveryのプロビジョニング、検索対象とするデータの取り込み※取り込むデータは「IBM Power S1014 データシート」のS1014のPDF watsonx.aiのプロビジョニング Assistantの初期設定 Assistantのカスタム拡張機能からDiscoveryを繋げる Assistantのカスタム拡張機能からwatsonx.aiを繋げる Assistantアクションの作成、問い合わせの検証 言語モデルを変えて問い合わせの検証 検証実施 1. Assistantのプロビジョニング はじめに Assistant のプロビジョニングを行います。 IBM Cloud にログインし、カタログ画面から "Assistant" を選択します。 ロケーションとプランを選択し「作成」をクリックします。 しばらくすると以下の画面の様に、Assistant がプロビジョニングされます。 2. Discoveryのプロビジョニング 次に Discovery をプロビジョニングします。 カタログ画面から "Discovery" を選択します。 ロケーションとプランを選択し「作成」をクリックします。 しばらくすると以下の画面の様に、Discovery がプロビジョニングされます。※ここで、資格情報内にある「API鍵」と「URL」をメモに控えます 「Watson Discoveryの起動」をクリックし「New Project +」をクリックします。 Project name に任意の名前を入力、Project type では「Conversational Serch」を選択し「Next」をクリックします。 作成されたプロジェクトをクリックします。 「Integration Deploy」をクリックします。 「API Information」タブをクリックし「Project ID」をメモに控えます。 次に検索対象の PDF を Discovery に取り込みます。 「Manage collections」から「New collection +」をクリックし、「Collection name」に任意の名前を入力、「Select language」を「Japanese」に設定します。 Upload files の領域に PDF をドラッグアンドドロップして「Finish」をクリックします。 アップロードが完了しました。次に、Smart Document Understanding機能(以下 SDU)を利用して PDF内のヘッダーやテキストなどのフィールドを定義します。 SDU は、PDFをはじめとする非構造化データの文書構造を理解して検索や分析の精度を向上させる機能です。例えばタイトルと定義した箇所を検索キーとしたり、検索対象をテキストと定義した箇所のみとするなど可能になります。 「Identify Field」タブをクリックします。 取り込んだ PDF が表示されるので右側の Field labels からヘッダー箇所やタイトル箇所などをドラッグアンドドロップして指定していきます。 ページの定義が終わったら「Submit page」をクリックして次の頁を定義していきます。 SDU では数ページ指定すると自動的にヘッダー箇所やテキスト箇所を認識してくれるので、何ページもあるドキュメントには便利な機能です。 今回は SDU を使って PDF の文書構造を定義しました。SDU以外の Discovery の機能については、また別の機会にご紹介したいと思います。 3. watsonx.aiのプロビジョニング ※watsonx.ai のプロビジョニング方法は「【てくさぽBLOG】IBM watsonx.aiを使ってみた(Part1)」をご参照ください。 4. Assistantの初期設定 Assistant の初期設定を行います。 Assistant を起動します。 起動後、以下の項目を入力します。 Assistant name:任意の名前を入力 Assistant Language:「English」を選択※日本語を選択することが可能ですが、Assistant のスターターキットは英語での利用を想定しているため今回はEinglishを選択します Assistant の公開先を「web」に設定します。※"Tell us about your self" 以降はご自身の情報を入力ください 入力後「Next」をクリックします。 デフォルトのチャットUI を利用するため「Next」をクリックします。 プレビュー画面が表示されるので「Create」をクリックします。(以下の画面は「Create」が隠れてしまっています) 「Congratulations!」と表示されたら初期設定は完了です。 5. Assistantのカスタム拡張機能からDiscoveryを繋げる 「Githubのassistant-toolkit」から "watson-discovery-query-openapi.jsonファイル" をダウンロードします。 Assistant のメニューから「Integration」をクリックします。 下にスクロールし「Build custom extension」をクリックします。 以下の画面が表示されるので「Next」をクリックします。 「Extension name」に任意の名前を入力し「Next」をクリックします。 先程ダウンロードした watson-discovery-query-openapi.jsonファイルをドラッグアンドドロップでアップロードします。 以下の画面が表示されるので「Finish」をクリックします。 追加した Extension の「Add +」をクリックします。 以下の画面が表示されるので「Next」をクリックします。 以下の画面が表示されるので、選択および入力します。 Authentication type:「Basic auth」を選択 Username:「apikey」と入力 Password:メモに控えたWatson DiscoveryのAPI鍵 discovery_url:メモに控えたWatson DiscoveryのURLから"http://"を除いた値 ※以下の画面ショットは discovery_url入力箇所が切れてしまっていますが、実際は「Servers」の下に discovery_url の項目があります 以下の画面が表示されるので「Finish」をクリックします。 Extension が「Open」となっていることを確認します。 これで watsonx Assistant と Watson Discovery が連携できました。 6. Assistantのカスタム拡張機能からwatsonx.aiを繋げる 次に、Assistant のカスタム拡張機能から watsonx.ai を利用できるように設定します。 設定には IBM Cloud の APIキーと watsonx.ai のプロジェクトID が必要です。取得方法は「【てくさぽBLOG】IBM watsonx.aiを使ってみた(Part2)」をご参照ください。なお、今回は東京リージョンで watsonx.ai をプロビジョニングします。 Github の「assistant-toolkit」から "watsonx-openapi.json" をダウンロードします。 Visual Studio Code などで東京リージョンの URL に編集し保存します。 Discovery の連携と同様に、Assistant のメニューから「Integration」「Build custom extension」をクリックします。 以下の画面が表示されるので、任意の Extension name を入力して「Next」をクリックします。 編集した watson-discovery-query-openapi.jsonファイルをドラッグアンドドロップでアップロードして「Next」をクリックします。 以下の画面が表示されるので「Finish」をクリックします。 追加した Extension の「Add +」をクリックします。 以下の画面が表示されるので、選択および入力します。 Authentication type:「Oauth 2.0」を選択 Grant type:「Custom apikey」を入力 apikey:取得済みのIBM CloudのAPIキー Client authentication:「Send as Body」を選択 Header prefix:Bearer(デフォルト) Servers:https://jp-tok.ml.cloud.ibm.com(自動入力) 以下の画面が表示されるので「Finish」をクリックします。 Extension が「Open」となっていることを確認します。 これで Assistant と watsonx.ai が連携できました。 7. Assistantアクションの作成、問い合わせの検証 Github の「assistant-toolkit」から "discovery-watsonx-actions.json" をダウンロードします。 Assistant の「Actions」から「Global Setting」をクリックします。 「Upload/Download」タブをクリックし、Uploadスペースに discovery-watsonx-actions.json をドラッグアンドドロップしてアップロードします。 以下の画面が表示されるので「Upload and replace」をクリックします。 以下の画面の通り、3つのアクションが作成されます。 メニューから「Variables」「Created by you」をクリックします。 「discovery_project_id」の値をメモに控えていた Discovery のプロジェクトID を入力し「Save」をクリックします。 「watsonx_project_id」の値をメモに控えて置いた watsonx.ai のプロジェクトID を入力し「Save」をクリックします。 「model_id」の値で watsonx.ai で使用する言語モデルを指定します。2024年2月29日に GA された日本語で訓練された Granite-japaneseモデルを使用するため、「ibm/granite-8b-japanese」を入力し「Save」をクリックします。(その他変数はデフォルト値とします) 「Actions」から「Generate Answer」を選択し、「model_input」の値を以下の例の様に日本語に変更します。 例: ("<s>[INST] <<SYS>>\nあなたは親切で、礼儀正しく、誠実なアシスタントです。常に安全を保ちながら、できるだけ役立つように答えてください。答えは簡潔に日本語で回答してください。回答には、有害、非倫理的、人種差別的、性差別的、有毒、危険、または違法なコンテンツを含めてはいけません。回答が社会的に偏見がなく、本質的に前向きであることを確認してください。\n\n質問が意味をなさない場合、または事実に一貫性がない場合は、正しくないことに答えるのではなく、その理由を説明してください。質問の答えがわからない場合は、誤った情報を共有しないでください。\n<</SYS>>\n\n質問に答えることで、次のエージェントの応答を生成します。タイトルが付いたいくつかの文書が提供されます。答えが異なる文書から得られた場合は、あらゆる可能性について言及し、文書のタイトルを使用してトピックまたは領域を区切ってください。与えられた文書に基づいて回答できない場合は、回答がない旨を記載してください。\n\n").concat(passages).concat("\n\n[question]: ").concat(query_text).concat("[/INST]") 以上で設定は完了です。 さっそく Assistant から問い合わせをしてみます。 右下の「Preview」をクリックします。 チャットから S1014 の特徴について問い合わせしてみます。約18秒後に以下の回答が返ってきました。 「Inspect」をクリックすると、Discovery の検索結果が以下の通り watsonx.ai に渡されていることがわかります。 <s>[INST] <<SYS>> あなたは親切で、礼儀正しく、誠実なアシスタントです。常に安全を保ちながら、できるだけ役立つように答えてください。答えは簡潔に日本語で回答してください。回答には、有害、非倫理的、人種差別的、性差別的、有毒、危険、または違法なコンテンツを含めてはいけません。回答が社会的に偏見がなく、本質的に前向きであることを確認してください。 質問が意味をなさない場合、または事実に一貫性がない場合は、正しくないことに答えるのではなく、その理由を説明してください。質問の答えがわからない場合は、誤った情報を共有しないでください。 <</SYS>> 質問に答えることで、次のエージェントの応答を生成します。タイトルが付いたいくつかの文書が提供されます。答えが異なる文書から得られた場合は、あらゆる可能性について言及し、文書のタイトルを使用してトピックまたは領域を区切ってください。与えられた文書に基づいて回答できない場合は、回答がない旨を記載してください。[title]: IBM Power S1014 柔軟かつセキュアなハイブリッドクラウド・インフ ラストラクチャーで俊敏性を実現[document]: 1 コ ア 当 た り 4 つ の M a t r i x Math Acceleratorによる迅速 なAI推論のために洞察と自動 化を合理化 業界標準のDIMMより2倍優 れたメモリーの信頼性と可用 性を提供 IBM® Power® S1014 は、1ソケット、4U Power10プロセッサーをベースにしたサー バーで、IBM AIX®、IBM iまたは Linux®上のビジネス・クリティカルなワークロード 向けに設計されています。Power S1014を使用することで、ワークロードはより 少数のサーバーに統合され、ソフトウェア・ライセンスの数、電力と冷却のコスト を削減します。Power S1014サーバーは、プロセッサー上でのメモリー暗号化を 使用してエンドツーエンドからデータを安全に保護し、ラック型またはタワーフォー ム・ファクターで購入できます。 プロセッサー・レベルでのメモリー暗号化と、POWER9 と比較してすべてのコア で4倍の暗号化エンジンによりコアからクラウドまでのデータを保護 ますます高度に分散した環境に存在するデータには、もはや境界線を設定すること は不可能です。 [question]: S1014の特徴は?[/INST] Assistant と Discovery のみの連携で検索した結果は以下の通りです。watsonx.ai を使用した方がより簡潔で分かりやすい回答を得られることが分かります。 8. 言語モデルを変えて問い合わせの検証 言語モデルを "llama-2-70b" にして同様の問い合わせをしたところ、約24秒後に回答が返ってきました。箇条書きで丁寧な印象です。 言語モデルを "elyza-japanese" にした際は10秒ほどで回答がありました。主語として「S1014の特徴は」とあることで、問いに対する回答が分かりやすくなっています。 言語モデルを変えて試した結果、llama-2-70B は箇条書きで回答し丁寧な印象を受けましたが、回答が得られるまでに24秒かかりました。一方 Granite-japanese や elyza-japanese はシンプルな回答を生成し、Granite-japanese は18秒、elyza-japanese は10秒というより短い時間で回答を得られました。 Watson Discovery の検索結果に基づき watsonx.ai で回答を生成するので、ある程度時間がかかると予想していましたが、elyza-japanese は速い回答で主語を添えてわかりやすく回答してくれました。 また、llama-2-70B は汎用的で使いやすいモデルですが、プロントで「日本語で回答して」と指示をしても問い合わせ内容によっては英語で回答することがありました。日本語の回答精度を求める場合は、Granite-japanese や elyza-japanese を使用した方が精度の高い回答を得ることができます。 モデルを変えて問い合わせてみると、モデルごとに得意なタスクが異なることがわかりました。数百億のパラメータで訓練された大規模言語モデルを一概に選択するのではなく、言語やタスクの特性に合わせて最適なモデルを選定することが重要になりそうですね。 さいごに いかがでしたでしょうか。Github から提供されているスターターキットを使って Assistant、Discovery、watsonx.ai を繋げてみましたが、ほどんど躓くことなく UI から簡単に設定することができました。 接続自体に高度な難しさは感じませんでしたが、問い合わせに対して正確な情報を得るためには Assistant の検索設定を調整する必要があります。今回は1つの PDFファイルの検索を行いましたが、複数の PDFファイルから情報を引き出す際には Assistant で query を設定することで特定の PDFファイルからの検索が可能です。 このように PDF などの非構造化データを検索対象として精度の高い回答を得るには、Discovery において文書の構造を明確に定義し、Assistant の検索設定を調整することが必要です。 実際にヘルプデスクなどの Webチャットで利用する場合は、Assistant にあらかじめ用意した回答をルールベースで回答させ、それでも解決できない問い合わせについては Discovery を通じて検索を行い、watsonx.ai を用いて回答を生成するという流れが効果的です。 ただし、生成AI によって生成される回答は常に”100%正確な回答”ではないので、より高い精度の回答を追求するためにはプロンプトの調整などチューニングを施すことが必要です。その結果、より使いやすい Webチャットの実現が期待できます。 お問い合わせ エヌアイシー・パートナーズ株式会社E-Mail:nicp_support@NIandC.co.jp   .highlighter { background: linear-gradient(transparent 50%, #ffff52 90% 90%, transparent 90%); } .anchor{ display: block; margin-top:-20px; padding-top:40px; } .btn_A{ height:30px; } .btn_A a{ display:block; width:100%; height:100%; text-decoration: none; background:#eb6100; text-align:center; border:1px solid #FFFFFF; color:#FFFFFF; font-size:16px; border-radius:50px; -webkit-border-radius:50px; -moz-border-radius:50px; box-shadow:0px 0px 0px 4px #eb6100; transition: all 0.5s ease; } .btn_A a:hover{ background:#f56500; color:#999999; margin-left:0px; margin-top:0px; box-shadow:0px 0px 0px 4px #f56500; } .bigger { font-size: larger; }

2024年01月16日

【イベント開催レポート】IBM watsonx.ai ハンズオンセミナー

こんにちは。ソリューション推進部です。 2023年12月12日に、エヌアイシー・パートナーズ株式会社として初めてのハンズオンセミナー『「IBM watsonx.ai 」を利用したRAGのハンズオンセミナー』を開催しました。 今回のハンズオンセミナーは、以下の2つのことを目的として行いました。 パートナー様に製品の紹介とハンズオンを合わせて体験いただくことで、製品をより深く知っていただくこと 製品を活用したビジネスの新たな応用の可能性を見つけ出していただくこと 私たちのチームでは、パートナー様にご紹介・ご説明する製品を「実際に触ってみること」を大切にしています。これは私たち自身の技術力の向上という目的もありますが、パートナー様に私たちのリアルな経験を交えながら製品のご説明をすることが、お客様の具体的な課題発掘や案件創出に繋がっていると考えているためです。 今回のハンズオンを通して、パートナー様ご自身が製品の価値を体感しご理解いただくことで、新しいビジネス展開のイメージを創出するお役に立ちたいと考えました。 それでは、今回実施したセミナーの内容について簡単にご紹介いたします。 目次 レポート watsonx.ai紹介講義 ハンズオン実施 IBMさまによる最新情報紹介・講義 さいごに お問い合わせ レポート 1. watsonx.ai紹介講義 ハンズオンを実施する前に、watsonx.ai と RAG についての講義を行いました。 国内では生成AIビジネスが加速し、競争力やセキュリティなどの課題が増えています。これらの課題を解決する製品として、IBM watsonx をご紹介しました。 watsonx は「watsonx.ai」「watsonx.governance」「watsonx.data」という3つの製品から成り立っています。watsonx.ai は、基盤モデルをベースとした AI開発スタジオです。 ここでは、IBM が信頼できるデータを用いて事前に学習した基盤モデルや Hugging Face, Inc.* と連携したオープンソースの基盤モデルが利用可能で、ビジネスの状況や要件に応じて最適な基盤モデルを選択することが可能です。 また、RAG についての概念や利点、活用が期待されるシーンもご説明しました。RAG を用いた具体的なユースケースとしては、IBM Watson Speech to Text や Watson Discovery、watsonx.ai を活用したコールセンター業務の事例や、watsonx Assistant や Watson Discovery、watsonx.ai を活用した ECサイトの問い合わせの事例を取り上げました。 時間の制約からこれら2つの事例しかご紹介できませんでしたが、今後、watsonx.ai を活用した多様な事例を私たち自身も理解し、パートナーさまと共に議論を深めていきたいと思います。 *Hugging Face, Inc.:機械学習 アプリケーションを作成するためのツールを開発しているアメリカの企業。 2. ハンズオン実施 ハンズオンでは、受講者の方々に「RAG」を活用した watsonx.ai の Foundation Model(LLM)への問い合わせを体験していただきました。 RAG とは「Retrieval-Augmented Generation」の略で、LLM への問い合わせをする際に、事前に用意したベクターストアへデータ(今回はPDF)を取り込んでおき、問い合わせプロンプトをもとにベクターストアを検索し、その結果を付与して LLM へ問い合わせを行う、というテクノロジーです。 RAG を使うことで、一般公開されていない社内情報を活用して LLM を利用することが可能となるため、自社での利用やお客様の課題を解決するための方法として有効であると考えています。 ハンズオンの環境につきましては、準備に時間をかけずスムーズに始められるよう、事前に弊社にて PC や RAG を利用するための Jupyter Notebook を用意いたしました。 また、watsonx.ai では複数の Foundation Model を利用できるため、複数のモデルを使って挙動の違いを確認してみたり、取り込む PDFファイルを追加することで回答がどう変わるのか、など、ご自身で自由に検証をする時間を多く設けました。皆さまそれぞれに前提スキルは異なっていたかもしれませんが、「体験の時間が足りない…」ということはなかったかと思います。 今回ベクターストアへ取り込むのは PDF のみとしましたが、テキストファイルや PowerPoint なども取り込むことができるので、応用できる使い方が非常に広いということを理解いただけたのではないかと感じています。 3. IBMさまによる最新情報紹介・講義 日本アイ・ビー・エム データ・AI・オートメーション事業部 四元さまに「watsonx」に関して、最新事例と製品アップデート情報の2本立てで講義をしていただきました。 事例においては、IBM社内の watsonx活用事例(AskIT)は特筆すべきと言えるでしょう。 AskIT は、IBMの自然言語処理(NLP)能力を活かし、30万件を超えるサポートチケットから抽出された知見をもとに、重要なサポートトピックに迅速に対処する AIアシスタントとして開発されたそうです。このツールは4ヶ月で133,000人の IBM社員に利用され、問い合わせの75%以上が AI によるチャットで解決されるなど、非常に大きな成果を上げています。 製品アップデート情報のメインは、12月に発表された「watsonx.governance」でした。 AI を組織として採用するためには倫理感のある意思決定が必須であり、watsonx.governance は AIガバナンスとして以下の3つの機能を提供する製品である、というご説明をいただきました。 AIライフサイクルを通してAIモデルの実態を把握するための「モデル・インベントリ」 AIの性能や課題の管理などを行う「評価・モニタリング」 総合監視画面を提供しリスクを可視化する「モデル・リスクガバナンス」 モデル・インベントリでは、他社の AI商品である「Amazon SageMaker」「Azure Machine Learning」などの AIモデルも合わせて管理・監視できることが非常に興味深いです。 watsonx は、AIワークフローを一貫してサポートすることで倫理的かつ透明性の高い AI利用を可能にしています。これらの技術革新は私たちが直面している数多くの課題に対する解決策を見出し、先進的なビジネス環境を促進していく上での重要なステップと言えるでしょう。 日本アイ・ビー・エム株式会社 データ・AI・オートメーション事業部 四元 さま さいごに セミナー後には、参加いただいたパートナーさまとご支援いただいた IBMさまとの懇親会を開催いたしました。 当懇親会を通してパートナー様の生成AI に対する取り組みや課題を直に伺うことができ、大変有意義な場となりました。 2023年12月18日に弊社は10周年を迎えました。10年間で培った経験を糧にし、今後さらに新しい取り組みにチャレンジしていきたいと考えております。 本年も、ブログを通してパートナーの皆さまへ様々な情報をお届けさせていただきます!今後ともどうぞよろしくお願いいたします。 懇親会会場 お問い合わせ エヌアイシー・パートナーズ株式会社E-Mail:nicp_support@NIandC.co.jp   .highlighter { background: linear-gradient(transparent 50%, #ffff52 90% 90%, transparent 90%); } .anchor{ display: block; margin-top:-20px; padding-top:40px; } .btn_A{ height:30px; } .btn_A a{ display:block; width:100%; height:100%; text-decoration: none; background:#eb6100; text-align:center; border:1px solid #FFFFFF; color:#FFFFFF; font-size:16px; border-radius:50px; -webkit-border-radius:50px; -moz-border-radius:50px; box-shadow:0px 0px 0px 4px #eb6100; transition: all 0.5s ease; } .btn_A a:hover{ background:#f56500; color:#999999; margin-left:0px; margin-top:0px; box-shadow:0px 0px 0px 4px #f56500; } .bigger { font-size: larger; }

back to top