対話型 R 開発

適用対象:Azure CLI ml extension v2 (現行)Python SDK azure-ai-ml v2 (現行)

この記事では、Azure Machine Learning スタジオのコンピューティング インスタンスで R を使用する方法について説明します。このコンピューティング インスタンスは、Jupyter Notebook で R カーネルを実行します。

一般的な RStudio IDE を使用することもできます。 RStudio または Posit Workbench は、コンピューティング インスタンスのカスタム コンテナーにインストールできます。 ただし、その場合、Azure Machine Learning ワークスペースに対する読み取りと書き込みに制限があります。

重要

この記事に示されているコードは、Azure Machine Learning コンピューティング インスタンスで動作します。 コンピューティング インスタンスには、コードを正常に実行するために必要な環境と構成ファイルがあります。

前提条件

スタジオのノートブックで R を実行する

コンピューティング インスタンス上の Azure Machine Learning ワークスペースでノートブックを使用します。

  1. Azure Machine Learning Studio にサインインします。

  2. ワークスペースがまだ開いていない場合は開きます

  3. 左側のナビゲーションで [ノートブック] を選択します

  4. RunR.ipynb という名前の新しいノートブックを作成します

    ヒント

    スタジオでノートブックを作成して操作する方法がわからない場合は、「ワークスペースで Jupyter ノートブックを実行する」を参照してください。

  5. このノートブックを選択します。

  6. ノートブックのツール バーで、コンピューティング インスタンスが実行されていることを確認します。 実行されていない場合は、ただちに開始します。

  7. ノートブックのツール バーで、カーネルを [R] に切り替えます。

    Screenshot: Switch the notebook kernel to use R.

これで、ノートブックで R コマンドを実行する準備ができました。

データにアクセスする

ワークスペース ファイル ストレージ リソースにファイルをアップロードし、R でそれらのファイルにアクセスできます。ただし、Azure "データ アセット" または "データストア" からのデータに保存されたファイルの場合、いくつかのパッケージをインストールする必要があります。

このセクションでは、Python と reticulate パッケージを使用して、対話型セッションからデータ アセットとデータストアを R に読み込む方法について説明します。 azureml-fsspec Python パッケージと reticulate R パッケージを使用して、表形式データを Pandas DataFrames として読み取ります。 さらに、このセクションでは、データ資産とデータストアを R data.frameに読み込む例も取り上げます。

これらのパッケージをインストールするには:

  1. コンピューティング インスタンスで、setup.sh という名前の新しいファイルを作成します。

  2. そのファイルにこのコードをコピーします。

    #!/bin/bash
    
    set -e
    
    # Installs azureml-fsspec in default conda environment 
    # Does not need to run as sudo
    
    eval "$(conda shell.bash hook)"
    conda activate azureml_py310_sdkv2
    pip install azureml-fsspec
    conda deactivate
    
    # Checks that version 1.26 of reticulate is installed (needs to be done as sudo)
    
    sudo -u azureuser -i <<'EOF'
    R -e "if (packageVersion('reticulate') >= 1.26) message('Version OK') else install.packages('reticulate')"
    EOF
    
  3. [ターミナルでスクリプトを保存して実行する] を選択してスクリプトを実行します

インストール スクリプトでは、こちらの手順が実行されます。

  • pip により、コンピューティング インスタンスの既定の conda 環境に azureml-fsspec がインストールされます
  • 必要に応じて R の reticulate パッケージがインストールされます (バージョンは 1.26 以上である必要があります)

登録済みのデータ アセットまたはデータストアから表形式データを読み取る

Azure Machine Learning で作成されたデータ アセットにデータが保存されている場合、こちらの手順を使用して、その表形式ファイルを Pandas DataFrame または R の data.frame に読み込みます。

注意

reticulate を使用したファイルの読み取りは、表形式のデータでのみ機能します。

  1. reticulate の正しいバージョンがあることを確認します。 バージョンが 1.26 未満の場合、新しいコンピューティング インスタンスを使用してみてください。

    packageVersion("reticulate")
    
  2. reticulate を読み込み、azureml-fsspec がインストールされた conda 環境を設定します

    library(reticulate)
    use_condaenv("azureml_py310_sdkv2")
    print("Environment is set")
  3. データ ファイルへの URI パスを見つけます。

    1. 最初に、ワークスペースのハンドルを取得します

      py_code <- "from azure.identity import DefaultAzureCredential
      from azure.ai.ml import MLClient
      credential = DefaultAzureCredential()
      ml_client = MLClient.from_config(credential=credential)"
      
      py_run_string(py_code)
      print("ml_client is configured")
    2. このコードを使用してアセットを取得します。 <MY_NAME><MY_VERSION> は、実際のデータ アセットの名前と番号に置き換えてください。

      ヒント

      スタジオの左側のナビゲーションで [データ] を選択して、データ アセットの名前とバージョン番号を見つけます。

      # Replace <MY_NAME> and <MY_VERSION> with your values
      py_code <- "my_name = '<MY_NAME>'
      my_version = '<MY_VERSION>'
      data_asset = ml_client.data.get(name=my_name, version=my_version)
      data_uri = data_asset.path"
    3. コードを実行して URI を取得します。

      py_run_string(py_code)
      print(paste("URI path is", py$data_uri))
  4. Pandas 読み取り関数を使用してファイルを R 環境に読み込みます

    pd <- import("pandas")
    cc <- pd$read_csv(py$data_uri)
    head(cc)

または、データストアの URI を使用して、登録済みのデータストア上のさまざまなファイルにアクセスし、それらのリソースを R data.frame に読み込むこともできます。

  1. この形式で、独自の値を使用してデータストア URI を作成します。

    subscription <- '<subscription_id>'
    resource_group <- '<resource_group>'
    workspace <- '<workspace>'
    datastore_name <- '<datastore>'
    path_on_datastore <- '<path>'
    
    uri <- paste0("azureml://subscriptions/", subscription, "/resourcegroups/", resource_group, "/workspaces/", workspace, "/datastores/", datastore_name, "/paths/", path_on_datastore)
    

    ヒント

    データストア URI の形式を覚える代わりに、ファイルがあるデータストアがわかっている場合は、スタジオ UI からデータストア URI をコピーして貼り付けることができます。

    1. R に読み込むファイルまたはフォルダーに移動します
    2. その横にある省略記号 (...) を選択します。
    3. メニューから [URI のコピー] を選択します。
    4. ノートブックまたはスクリプトにコピーするデータストア URI を選択します。 <path> の変数はコード内で作成する必要がある点に注意してください。 Screenshot highlighting the copy of the datastore URI.
  2. 前述の URI を使用して filestore オブジェクトを作成します。

fs <- azureml.fsspec$AzureMachineLearningFileSystem(uri, sep = "")
  1. R の data.frame に読み込みます。
df <- with(fs$open("<path>)", "r") %as% f, {
 x <- as.character(f$read(), encoding = "utf-8")
 read.csv(textConnection(x), header = TRUE, sep = ",", stringsAsFactors = FALSE)
})
print(df)

R パッケージのインストール

コンピューティング インスタンスには、R パッケージが数多くプレインストールされています。

他のパッケージをインストールするには、場所と依存関係を明示的に指定する必要があります。

ヒント

別のコンピューティング インスタンスを作成または使用する場合は、インストールしたパッケージをすべて再インストールする必要があります。

たとえば、tsibble パッケージをインストールするには、次のようにします。

install.packages("tsibble", 
                 dependencies = TRUE,
                 lib = "/home/azureuser")

注意

Jupyter ノートブックで実行される R セッション内でパッケージをインストールする場合、dependencies = TRUE は必須です。 これを使用しないと、依存パッケージが自動的にインストールされません。 正しいコンピューティング インスタンスの場所にインストールするために、lib の場所も必須です。

R ライブラリを読み込む

/home/azureuser を R ライブラリ パスに追加します。

.libPaths("/home/azureuser")

ヒント

ユーザーがインストールしたライブラリにアクセスするために、各対話型 R スクリプトで .libPaths を更新する必要があります。 このコードを各対話型 R スクリプトまたはノートブックの先頭に追加します。

libPath が更新されたら、通常どおりにライブラリを読み込みます。

library('tsibble')

ノートブックで R を使用する

前述の問題以外は、ローカル ワークステーションなど他の環境と同様に R を使用します。 ノートブックまたはスクリプトで、ノートブック/スクリプトが保存されているパスに対する読み取りと書き込みを行うことができます。

注意

  • 対話型 R セッションからは、ワークスペース ファイル システムへの書き込みのみ行うことができます。
  • 対話型 R セッションから、MLflow (ログ モデルやクエリ レジストリなど) は操作できません。

次のステップ