Loading [MathJax]/extensions/tex2jax.js

Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Azure Microsoft

Azure Machine LearningでDataStoreを作成してAzure Storage File Shares(ファイル共有)のデータを操作する方法

投稿日:2023年5月24日 更新日:

 

<目次>

(1) Azure Machine LearningでDataStoreを作成してAzure Storage File Shares(ファイル共有)のデータを操作する方法
 (0-1) やりたいこと
 (1-0) STEP0:前提条件(例)
 (1-1) STEP1:ワークスペースへの接続
 (1-2) STEP2:DataStoreの生成
 (1-3) STEP3:DataStoreを経由したデータアクセス処理の記述
 (1-4) STEP4:実行と結果確認

(1) Azure Machine LearningでDataStoreを作成してAzure Storage File Shares(ファイル共有)のデータを操作する方法

(0-1) やりたいこと

・Azure Machine LearningからAzure Storage File Shares(ファイル共有)のファイル(例:画像データ)に「DataStore」経由でアクセスしたい。
(図100)

MS公式サイトによると、DataStoreは既存のStorage AccountをAzure Machine Learningで使えるようにするための『紐づけ設定』の様な位置づけです。

(図101)

(1-0) STEP0:前提条件(例)

まだの方は下記記事に沿って実施頂けたらと思います。
→(手順)Azure Machine LearningでKerasを用いたモデルを作成~公開する手順(★準備中)
 

●STEP0-1:Azure Machine Learning

・Azure Machine Learningのリソースが作成済
・Compute clustersも作成済
(図111)Compute clustersの例

●STEP0-2:Azure Storage

・Azure Storage File Shares(ファイル共有)が作成済
・上記がAzure Machine Learningと紐づいている
(図112)Azure Storageのファイル共有の例

(1-1) STEP1:ワークスペースへの接続

・①下記コードをAzure Machine LearningのNotebooksのセルに入力します。
(セル値1-1)

  1. # Handle to the workspace
  2. from azure.ai.ml import MLClient
  3. # Authentication package
  4. from azure.identity import DefaultAzureCredential
  5. credential = DefaultAzureCredential()

(セル値1-2)

  1. # Get a handle to the workspace
  2. ml_client = MLClient(
  3. credential=credential,
  4. subscription_id="[サブスクリプションID]",
  5. resource_group_name="[Azure Machine Learningのリソースグループ名]",
  6. workspace_name="[Azure Machine Learningのワークスペース名]",
  7. )
(図121)

(1-2) STEP2:DataStoreの生成

Azure Machine Learningのワークスペースと紐づいている既存のStorage Accountにアクセスするための「データストア」を生成します。

●STEP2-1:Azure Storage側で、SASトークンを生成

・①Azure Machine Learningと紐づくAzure Storageを開き「Shared Access Signature」ブレードを選択。
(図122①)
・②用途に応じて必要な内容を入力
・サービス=BLOB、ファイルを選択
・リソース=コンテナ、オブジェクトを選択
(図122②)

(補足)設定の理由

⇒(参考)Azure StorageでSASトークン発行時の「使用できるリソースの種類」の意味について(★準備中)
・③「SASと接続文字列を生成する」を押下
→「SASトークン」はNotebooksの実装で使うので控える。
(図122③)
・④ファイル共有名(file_share_name)の確認
(図122④)Azure Storageの「ファイル共有」

この記事ではファイル共有名「code-391ff5ac-6576-460f-ba4d-7e03433c68b6」をDataStore作成時の「file_share_name」で使用します。

●STEP2-2:Azure Machine LearningのNotebooksの実装

・①下記コードをAzure Machine LearningのNotebooksのセルに入力します。
 
(セル値2-1)
  1. from azure.ai.ml.entities import AzureFileDatastore
  2. from azure.ai.ml.entities._credentials import (
  3. AccountKeyConfiguration,
  4. CertificateConfiguration,
  5. NoneCredentialConfiguration,
  6. SasTokenConfiguration,
  7. ServicePrincipalConfiguration,
  8. )
  9. from azure.ai.ml import MLClient
  10.  
  11. store = AzureFileDatastore(
  12. name="file_sas_example",
  13. description="Datastore pointing to a file share using sas token.",
  14. account_name="[ご自身のストレージアカウント名]",
  15. file_share_name="[ご自身のストレージアカウントのファイル共有名]",
  16. credentials=SasTokenConfiguration(
  17. sas_token="[ご自身のSAS Token]"
  18. ),
  19. )
  20. ml_client.create_or_update(store)
(図131)

(結果例)

  1. AzureFileDatastore({
  2. 'type': ,
  3. 'name': 'file_sas_example',
  4. 'description': 'Datastore pointing to a file share using sas token.',
  5. 'tags': {},
  6. 'properties': {},
  7. 'id': '/subscriptions/xxxxx/resourceGroups/rainbow-machine-learning/providers/Microsoft.MachineLearningServices/workspaces/rainbow-ml-workspace/datastores/file_sas_example',
  8. 'Resource__source_path': None,
  9. 'base_path': '/mnt/batch/tasks/shared/LS_root/mounts/clusters/rainbow-ml-compute/code/Users/xxxxx/keras_image_classification',
  10. 'creation_context': None,
  11. 'serialize': ,
  12. 'credentials': {'type': 'sas'},
  13. 'file_share_name': 'code-391ff5ac-6576-460f-ba4d-7e03433c68b6',
  14. 'account_name': 'rainbowmlstorage',
  15. 'endpoint': 'core.windows.net',
  16. 'protocol': 'https'})

(1-3) STEP3:DataStoreを経由したデータアクセス処理の記述

●STEP3-1:Azure Machine LearningのNotebooksの実装

・①下記コードをAzure Machine LearningのNotebooksのセルに入力します。
 
(セル値3-1)
  1. from azure.ai.ml import command
  2. from azure.ai.ml import UserIdentityConfiguration
  3. from azure.ai.ml import Input
  4.  
  5. gpu_compute_target = "[ご自身のCompute clusters名]"
  6. custom_env_name = "keras-env"
  7. web_path = "azureml://datastores/file_sas_example/paths/Users/[ご自身のデータ格納先パス]"
  8.  
  9. # ジョブの最新環境を取得
  10. job_env = ml_client.environments.get(name=custom_env_name, version=str(len(list(ml_client.environments.list(name=custom_env_name)))))
  11. # ジョブの定義
  12. job = command(
  13. # 入力パラメータの設定
  14. inputs=dict(
  15. data_folder=Input(type="uri_folder", path=web_path),
  16. ),
  17. # CPU/GPUリソース
  18. compute=gpu_compute_target,
  19. # 実行環境
  20. environment=f"{job_env.name}:{job_env.version}",
  21. # 実行対象モジュールの格納先
  22. code="./src/",
  23. # 実行対象モジュールと引数
  24. command="python datastore_test_get_image.py --data-folder ${{inputs.data_folder}}",
  25. experiment_name="datastore_test_get_image",
  26. display_name="datastore_test_get_image",
  27. )
  28. # ジョブの実行
  29. ml_client.jobs.create_or_update(job)
  30.  
 
CPUクラスター、実行環境、データ格納先などを指定して、データアクセス用のPythonプログラムを呼び出しする処理です。実行するとJOBが生成され、JOBメニューから状況をモニタリングできます。
 
また、web_pathで指定したパスは環境(Dockerコンテナ)側にもマウントされて、アクセスが可能になります。
 
(図141)

●STEP3-2:NoteBooks経由で呼び出すPythonプログラムの実装

ここで、ジョブとして実行する処理(画像の処理や、モデル学習など)を記述します。今回は疎通確認用の処理として以下を行います。
 
(例)引数を受け取って、画像を(Azure MLワークスペースから)取得して、環境内(Dockerコンテナ)に保存してみる
 
(図142)

・①下記コードをAzure Machine LearningのNotebooksのセルに入力します。
 
(サンプルプログラム)datastore_test_get_image.py
  1. from os import listdir
  2. import os
  3. import argparse
  4. import matplotlib.image as mpimg
  5. import mlflow
  6.  
  7. print("--- 引数の取得START")
  8. parser = argparse.ArgumentParser()
  9. # データセットの格納場所を設定
  10. parser.add_argument(
  11. "--data-folder",
  12. type=str,
  13. dest="data_folder",
  14. default="data",
  15. help="data folder mounting point",
  16. )
  17. args = parser.parse_args()
  18.  
  19. # Start Logging
  20. mlflow.start_run()
  21.  
  22. data_folder = args.data_folder
  23. print("--- 引数の取得END")
  24.  
  25. photos, labels = list(), list()
  26. # ディレクトリ内のサブフォルダをループ
  27. print("===== LISTDIR: "+str(listdir(data_folder)))
  28. for sub_folder in listdir(data_folder):
  29. # サブフォルダ内の子フォルダをループ
  30. print("===== SUBFOLDER: "+data_folder+"/"+sub_folder)
  31.  
  32. # data配下が「ディレクトリか?」「ファイルか?」のチェック
  33. if os.path.isdir(data_folder+"/"+sub_folder):
  34. # サブディレクトリの場合、その中のファイルをループ
  35. for file in listdir(data_folder+"/"+sub_folder):
  36. # サブフォルダ内の子フォルダをループ
  37. print("===== FILE: "+file)
  38. if file.startswith('.amlignore'):
  39. continue
  40. else:
  41. # データを保存する
  42. img = mpimg.imread(data_folder +"/"+ sub_folder +"/"+ file)
  43. mlflow.log_image(img, str(data_folder +"/"+ sub_folder +"/"+ file))
  44. else:
  45. # サブフォルダ内の子フォルダをループ
  46. print("===== FILE: "+sub_folder)
  47. # データを保存する
  48. img = mpimg.imread(data_folder +"/"+sub_folder)
  49. mlflow.log_image(img, str(data_folder +"/"+sub_folder))
  50.  
  51. mlflow.end_run()
 
これはAzure MLのワークスペース内にある画像を、Pythonプログラム内で読み取り、機械学習の環境であるDockerコンテナ内に保存する処理です(特に意味ナシ、疎通目的)。
 
(図143)

(1-4) STEP4:実行と結果確認

●STEP4-1:セルを順番に実行

・認証 ⇒ DataStore作成 ⇒ ジョブ作成と順番に実行していきます。
 
(図144)

Adsense審査用広告コード


Adsense審査用広告コード


-Azure, Microsoft
-

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

Azure Storageとは?特徴や4種類のストレージの概要をご紹介

  <目次> (1) Azure Storageとは?特徴や4種類のストレージの概要をご紹介  (1-1) Azure Storageとは?4種類のストレージの概要   (1-1-1) BL …

Azureリソースグループの作り方の手順について

  <目次> (1) Azureリソースグループの作り方の手順について  (1-1) Azureリソースグループとは?  (1-2) Azureリソースグループの作成手順  (1-3) Az …

Azureの可用性ゾーンとは?概要や設定画面の例も交えてご紹介

  <目次> (1) Azureの可用性ゾーンとは?概要や設定画面の例も交えてご紹介  (1-1) Azureの可用性ゾーンが無い場合に起きる問題  (1-2) Azureの可用性ゾーンとは …

Azure Cosmos DBとは?特徴や構造およびデータ形式について

  <目次> (1) Azure Cosmos DBとは?特徴や構造およびデータ形式について  (1-1) Azure Cosmos DBとは?  (1-2) Azure Cosmos DB …

no image

Outlookで「代理人アクセス」が表示されない

  <目次> (1) Outlookで「代理人アクセス」が表示されない  (1-1) 事象概要  (1-2) 原因  (1-3) 対策(Gmailの例)  (1-4) 備考:「代理人アクセス …

  • English (United States)
  • 日本語
S