- Oracle Cloud
- Oracle Database
OCIでGPUインスタンスを構築してみた
OCIで提供されている生成AIサービスとGPUインスタンスを前回の記事「生成AIにGPUが適している理由」で紹介しました。本記事では、GPUインスタンスをデプロイして、インスタンス上でLLM(大規模言語モデル)の動作環境を構築する方法をご紹介します。
|
通常、Oracle Cloud Infrastructure (以下、OCI) のDatabase Cloud Service(以下、DB System)の起動・停止・状態の確認などの管理操作を行う際、Oracle Cloud管理コンソールまたはOCI CLIを利用します。また、Oracle CloudではOCI DB Systemの管理操作を行うREST APIを利用したbashスクリプト(OCI-CURL)も提供しています。
OCI-CURLを利用することでOCI DB Systemの管理操作を自動で行う スクリプトを簡単に作成できます。
OCI DB Systemだけでなく、OCIで提供されるほとんどのサービスはOCI-CURLを利用して管理操作ができます。
この記事では、OCI DB Systemの管理操作に焦点を絞ってご紹介します。
※記事の中で、利用するREST APIのドキュメント上での記載個所をご紹介します。
REST APIのドキュメントは、以下のURLよりご確認ください。
[REST APIの詳細情報を記載したドキュメントURL]
https://docs.cloud.oracle.com/en-us/iaas/api/#/
まずは、Linux OSのマシン上でOCI-CURLを設定する手順をご紹介します。
1.以下のURLへアクセスし、表示されるOCI-CURLのサンプルスクリプトの内容を全てコピーします。
[サンプルスクリプトURL]
https://docs.cloud.oracle.com/iaas/Content/Resources/Assets/signing_sample_bash.txt
|
2.OCI-CURLを実行するLinux OSマシン上で新規スクリプト「oci-curl.sh」を作成し、”1”でコピーした内容を
貼り付けます。
[opc@oms1 ~]$ mkdir restapitest [opc@oms1 ~]$_cd restapitest [opc@oms1 restapitest]$ vi oci-curl.sh
3.作成したスクリプトの以下の設定を環境に合わせて編集し、保存します。
編集対象項目と各項目の確認方法を以下に記載します。
|
※編集項目※
tenancyId:テナンシOCID
authUserId:Oracle Cloudへの接続に利用する認証ユーザーのOCID
keyFingerprint:RSAキーのフィンガープリント
privateKeyPath:(操作対象へ接続するための)秘密鍵のファイル名
[確認方法]
a.テナンシOCID:
Oracle Cloud管理コンソールより、トップページで画面の右上にある「プロファイル」アイコンより、
”テナンシ:<クラウドアカウント名>”を選択します。
テナンシ詳細ページが展開されたら、OCIDの横にある”Copy(コピー)”を選択します。
’oci-curl.sh’のtenancyId の値をコピーした値に更新します。
|
b.認証ユーザのOCID:
Oracle Cloud管理コンソールより、トップページで画面の右上にある「プロファイル」アイコン
より、”ユーザー名“を選択します。
「ユーザー詳細」ページが展開されたら、OCIDの横にある“Copy(コピー)”を選択します。
’oci-curl.sh’のauthUserId の値をコピーした値に更新します。
|
c.秘密鍵のファイル名:
設定前に、秘密鍵をまだ生成していない場合はPEM形式で生成しておきましょう。
秘密鍵の対となる公開鍵の情報も必要となるため、公開鍵も併せて生成します。
■Linux OSマシンにて「opc」ユーザーとして秘密鍵と公開鍵を生成する方法
以下のコマンドをopcユーザにて実行します。
[秘密鍵作成コマンド]
openssl genrsa -out oci_api_key.pem 2048
※上述ののコマンドは、パスフレーズなしで秘密鍵を生成します。
パスフレーズを設定する必要がある場合は、OCIのドキュメントをご参照ください。
参考:https://docs.cloud.oracle.com/ja-jp/iaas/Content/GSG/Tasks/creatingkeys.htm
https://docs.cloud.oracle.com/ja-jp/iaas/Content/API/Concepts/apisigningkey.htm
<実行例>
[opc@oms1 ~]$ openssl genrsa -out oci_api_key.pem 2048
Generating RSA private key, 2048 bit long modulus
......................... ....... +++
... +++
e is 65537 (0x10001)
[公開鍵作成コマンド]
openssl rsa -pubout -in oci_api_key.pem -out oci_api_key_public.pem
※上述のコマンドは、パスフレーズなしで秘密鍵を生成します。
パスフレーズを設定する必要がある場合は、OCIのドキュメントをご参照ください。
<実行例>
[opc@oms1 ~]$ openssl rsa -pubout -in oci_api_key.pem -out oci_api_key_public.pem
writing RSA Key
秘密鍵ファイル名とファイルの配置先を記録します。
’oci-curl.sh’のprivateKeyPathの値を記録した値に更新します。
d.RSAキーのフィンガープリント:
RSAキーのフィンガープリントを生成するためには、手順3cで生成した公開鍵の内容をコピー
します。
<実行例>
[opc@oms1 ~]$ cat oci_ap i _key_public.pem
-----BEGIN PUBLIC KEY-----
MUIBI LANBgkqhkiG9w0BAQEFAAOCAQ8AMI IBCgKCAQEA4GES6qW4fm2Bru/zoylz
OCIコンソールに移動し、手順3bで説明されている「ユーザーの詳細」ページに移動して、左側の
[リソース]セクションの下にある[API Keys(APIキー)]を選択後、“AddPublic Key(公開鍵の追加)“
を選択します。
公開キーの追加ページが展開されたら、”PASTE PUBLIC KEYS(公開鍵の貼り付け)”を選択します。
|
コピーしておいた公開鍵の情報を貼り付け、“Add(追加)”を選択します。
|
[API Keys(APIキー)]に追加した公開鍵のフィンガープリントが表示されます。
|
この値をコピーし、’oci-curl.sh’のauthUserId の値をコピーした値に更新します。
4.oci-curl.shへ実行権限を付与します。
[コマンド例]
chmod 700 oci-curl.sh
oci-curl.shを作成することで、OCI-CURLの設定は完了です。
OCI DB Systemを起動するためには、”startDBnode.sh”を作成します。
シェルスクリプトの内容は以下の内容を含めて作成します。
・“OCI-CURLの設定”で作成した、テナンシー等の主要な情報を含むoci-curl.shを実行
・DB Nodeを起動するために必要な情報をシェルスクリプト内の関数(oci-curl関数)に設定する。
※DB Systemの起動・停止は、DB Systemを構成するDB Nodeに対して実行します。
設定する関数の設定値について、以下に紹介します。
1.Database endpoint :DB Systemが存在するリージョンを示すDatabase Service用のエンドポイント
を確認します。
REST APIの詳細情報を記載したドキュメントURLのページをスクロールし、左側の項目を以下の順で選択
します。パラメータの設定情報が確認できます。
“Database Service API” -> “Database Service API Home”
東京リージョンを利用している場合、Database endpointは“database.ap-tokyo-1.oraclecloud.com”
となります。
|
2.Method of call :実行する処理内容を指定します。 ここでは、DB Nodeに対する処理を指定します。
処理内容は、GET,DELETE,POST,PUTのいずれかを指定します。ここでは、起動処理を実行するため、
“POST”を設定します。
3.JSON file:リクエスト本文として利用するための空のJSONファイルを作成します。
ここでは、 “empty.json”という名前で作成します。
JSONファイルで実行するコンテンツは中括弧{}で示します。DB Nodeを起動/停止するリクエスト
の場合、構成パラメータの設定を行う必要はありません。そのため、今回の処理では空のJSON
ファイルを作成します。
※DB Systemの作成操作を行う場合等は、JSONファイルのコンテンツとして構成パラメーターを
記載します。
[opc@oms1 restapitest]$ cat empty.json
{
}
4.API Version & DB Node & Action:使用するAPIのバージョンと操作対象のAPI(dbNodes)および
実行する処理を指定します。
[APIバージョンと操作対象の設定]
/20160918/dbNodes/$1
※上述は、利用するAPIのバージョンが20160918の例です。全てのOCI APIには同じバージョンがあり
ます。
この情報に、DBノードで実行する必要があるアクションのタイプを指定するクエリパラメーターを追加
する必要もあります。 DBノードを開始するので、“?action=start”を追加します。
よって、以下の引数をパラメータに設定します。
[oci-curlに指定するパラメータ設定]
/20160918/dbNodes/$1? action=start
REST APIの詳細情報を記載したドキュメントURLのページをスクロールし、左側の項目を以下の順で
選択します。パラメータの設定情報が確認できます。
“Database Service API” -> “DbNode” ->”DbNodeAction”
|
|
1.~4.で確認した情報を用いて作成した“startDBnode.sh”の内容は以下のとおりです。
#!/bin/bash
. ./oci-curl.sh
oci-curl database.ap-tokyo-1.oraclecloud.com post ./empty.json/20160918/dbNodes/$1?action=start
“startDBnode.sh”へ実行権限を付与します。
chmod 700 startDBnode.sh
[opc@oms1 restapitest]$ chmod 700 startDBnode.sh
起動する対象のDB NodeのOCIDを引数に指定して、スクリプトを実行します。
[DB NodeのOCIDの確認方法]
処理対象のDB Nodeを識別するためのOCIDは、Oracle Cloud管理コンソールより以下の手順で
確認します。
“Bare Metal, VM and Exadata” -> (操作対象の)”DBsystem” -> (DB System詳細ページの
リソース項目) “Nodes”
“Nodes”の右端にあるアクションメニュー (3つの点)より、”Copy OCID(OCIDのコピー)”を
選択します。
|
コピーしたDBノードのOCIDを利用して、“startDBnode.sh”を実行します。
JSONの出力で “lifecycleState(状態)”: “STARTING(起動中)”となったことが確認できます。
<実行例>
[opcloms1 restapitest]$ ./startDBnode.sh ocid1.dbnode.oc1.ap-tokyo-1.ab
{
"additional Details" : null,
"backupIpId": null,
"backupVnic2Id" : null,
"backupVnicId" : null,
"dbSystemld" : "ocid1.dbsystem.oc1.ap-tokyo-1.ab
"faultDomain" : "FAULT-DOMAIN-1",
"hostIpId" : null,
"hostname" : "testdblaarthi,
"id" : "ocid1.dbnode.oc1.ap-tokyo-1.ab
"LifecycleState" : " STARTING",
"maintenanceType": null,
"softwareStorageSizeInGB" : 200,
"timeCreated" : "2020-07-30T07:42:58.967Z”,
"timeMaintenanceWindowEnd": null,
"timeMaintenanceWindowStart": null,
"vnic2Id": null,
"vnicId" : "ocidi.vnic.oc1.ap
}
スクリプト実行後、Oracle Cloud管理コンソールを確認するとDB Nodeの状態が”STARTING”となっていることを確認できます。
|
しばらくすると、状態は “Available(実行中)”に変わります。
|
OCI DB Systemの状態を確認する新しいスクリプト “getstatusDBnode.sh” を作成します。
スクリプトの内容はは“startDBnode.sh” とほとんど同じです。
oci-curl関数の2番目のパラメータで指定する実行する処理内容は”GET”を設定します。
GETの場合は、起動の際のように3番目のパラメータとして空のJSONファイルを指定する必要がありません。
4番目のパラメータとして指定するAPIのバージョンと操作対象のDB Nodeの情報では、以下の設定を利用します。
[APIバージョンと操作対象の設定]
/20160918/dbNodes/$1
$1には特定のDB NodeのOCIDを指定するため、actionパラメータは必要ありません。
APIの詳細情報が掲載されたURLのページをスクロールし、左側の項目を以下の順で選択します。パラメータの設定情報が確認できます。
“Database Service API” -> “DbNode” ->”GetDbNode
|
“getstatusDBnode.sh”の内容は以下のとおりです。
#!/bin/bash
. ./oci-curl.sh
oci-curl database.ap-tokyo-1.oraclecloud.com get /20160918/dbNodes/$1
“getstatusDBnode.sh”へ実行権限を付与します。
chmod 700 getstatusDBnode.sh
確認する対象のDB NodeのOCIDを引数に指定して、スクリプトを実行します。
JSONの出力で “lifecycleState(状態)”: “AVAILABLE(実行中)”であることが確認できます。
[opc@oms1 restapitest]$ ./getstatusDBnode.sh ocid1.dbnode.oc1.ap-tokyo-1.ab
{"additional Details":null,"backupIpId":null,"backupVnic21d":null,"backupVnicld":null, "dbSystemId":"ocid1,XXXXXXXXXXXXXXXXXXXXXXX,faultDomain":"FAULT-DOMAIN-1", "hostlpld":null, "hostname" : "testdblaartXXXXXXXXXXXXXXXXXXXXXXXXX,"lifecycleState":"style="color:red">AVAILABLE", "maintenanceType" :null, "Soft:42:58.9677",timeMaintenanceWindowEnd":null,"timeMaintenanceWindowStart":null,"vnic21d":null,"vnicld": "qvgqph7b14y5qrccgcmimdtee4osz4rya" } [opc@oms1 restapitest]$
OCI DB Systemを起動するためには、”stopDBnode.sh”を作成します。
スクリプトの内容は“startDBnode.sh” と同様ですが、actionパラメータの値を“STOP”とする
必要があります。
“stopDBnode.sh”の内容は以下のとおりです。
#!/bin/bash
. ./oci-curl.sh
loci-curl database.ap-tokyo-1.oraclecloud.com post ./empty.json /20160918/dbNodes/$1?action=stop
”stopDBnode.sh”に実行権限を付与します。
chmod 700 stopDBnode.sh
停止する対象のDB NodeのOCIDを引数に指定して、スクリプトを実行します。
DBの“lifecycleState(状態)”:”STOPPING(停止中)”となり、しばらくすると停止します。
[opc@oms1 restapitest]$ ./stopDBnode.sh ocid1.dbnode.oc1.ap-tokyo-1.ab
"additional Details" : null,
"backupIpld" : null,
"backupVnic2ld": null,
"backupVnicld" : null,
"dbSystemld" : "ocid1.dbsystem.oc1.ap-tokyo-1.ab
"faultDomain" : "FAULT-DOMAIN-1",
"hostIpld": null,
"hostname" : "testdblaarthi",
"id" : "ocid1.dbnode.oc1.ap-tokyo-1.ab
"lifecycleState" : " STOPPING",
"maintenanceType": null,
"softwareStorageSizeInGB": 200,
"timeCreated" : "2020-07-30T07:42:58.967Z”,
"timella intenanceWindowEnd": null,
"timeMaintenanceWindowStart": null,
"vnic2Id": null,
"vnicld" : "ocidl.vnic.oc1.ap-tokyo-1.ab
[opcloms1 restapitest]$
スクリプト実行後、Oracle Cloud管理コンソールを確認するとDB Nodeの状態が”STOPPING”となっていることを確認できます。
|
DB Systemの操作用に作成したスクリプトに少し変更を加えるだけで、Autonomous Databaseの管理操作を行うためのスクリプトが作成できます。
[Autonomous Databaseの起動]
APIの詳細情報が掲載されたURLのページをスクロールし、左側の項目を以下の順で選択します。パラメータの設定情報が確認できます。
“Database Service API” -> “AutonomousDatabase” ->” StartAutonomousDatabase”
|
Autonomous Databaseを起動するスクリプトの内容は以下のとおりです。
#!/bin/bash
. ./oci-curl.sh
oci-curl database.ap-tokyo-1.oraclecloud.com POST ./empty.json /20160918/autonomous Databases/$1/actions/start
[Autonomous Databaseの状態確認]
DB Systemと同様にAutonomous DatabaseのOCIDを引数に指定確認することで、スクリプトを実行することで、データベースが起動しているかを確認することが可能です。
APIの詳細情報が掲載されたURLのページをスクロールし、左側の項目を以下の順で選択します。パラメータの設定情報が確認できます。
“Database Service API” -> “AutonomousDatabase” ->” GetAutonomousDatabase”
Autonomous Databaseの状態を確認するスクリプトの内容は以下のとおりです。
#!/bin/bash
../oci-curl.sh
oci -curl database.ap-tokyo-1.oraclecloud.com get /20160918/autonomousDatabases $1
[Autonomous Databaseの停止]
APIの詳細情報が掲載されたURLのページをスクロールし、左側の項目を以下の順で選択します。パラメータの設定情報が確認できます。
“Database Service API” -> “AutonomousDatabase” ->” StopAutonomousDatabase”
Autonomous Databaseを停止するスクリプトの内容は以下のとおりです。
#!/bin/bash
../oci-curl.sh
oci-curl database.ap-tokyo-1.oraclecloud.com POST ./empty.json /20160918/autonomousDatabases/$1/actions/ stop
■本記事の内容について
本記事に示した定義及び条件は変更される場合があります。あらかじめご了承ください。
■商標に関して
・Oracle®、Java、MySQL及びNetSuiteは、Oracle、その子会社及び関連会社の米国及びその他の国における登録商標です。
・Amazon Web Services、AWS、Powered by AWS ロゴ、[およびかかる資料で使用されるその他の AWS 商標] は、Amazon.com, Inc. またはその関連会社の商標です。
文中の社名、商品名等は各社の商標または登録商標である場合があります。
OCIで提供されている生成AIサービスとGPUインスタンスを前回の記事「生成AIにGPUが適している理由」で紹介しました。本記事では、GPUインスタンスをデプロイして、インスタンス上でLLM(大規模言語モデル)の動作環境を構築する方法をご紹介します。
前回の記事でお伝えしたとおり、OCVSを構築するとVMwareの複数の機能が利用可能です。 それらの機能の中で、今回はHCXの概要や具体的な機能、OCVSでHCXを利用するメリットなどをお伝えします!
2024年5月にOracle Cloud環境にて、先行してOracle DB 23aiがリリースされました。 Oracle Base Database ServiceにおけるOracle Database 23aiの検証結果を報告します。 今回は「統合メモリー管理」をテーマにお伝えします。