После нескольких лет почти исключительного внимания к Python в качестве основного языка для набора инструментов Microsoft для обработки данных, сообщество R вернулось к доброй милости Microsoft в октябре 2019 года, и MS выпустила Azure Machine Learning R SDK на GitHub (неудивительно, что он создан поверх пакета SDK для Azure ML Python). Эти инструменты предназначены для упрощения использования облачного хранилища, вычислений и других ресурсов Azure (например, экспериментов, моделей и т. Д.) С помощью кода, в отличие от пользователя Машинное обучение Azure. интерфейс (UI), он же студия. Это отличная возможность для всех, кто хочет создавать полностью автоматизированные конвейеры обработки данных или просто предпочитает подход, ориентированный на код.

Вам нужно выполнить несколько простых шагов, чтобы настроить себя для использования Azure ML R SDK, и Лука Заварелла написал отличное руководство по началу работы с ним. В рамках этого руководства я предполагаю, что у вас уже есть рабочее пространство Azure ML и вам удалось получить к нему доступ - по крайней мере, через студию. В противном случае следуйте руководству Луки.

Элементы рабочей области машинного обучения Azure - краткое описание

Рабочая область машинного обучения Azure - это ресурс верхнего уровня, предоставляющий централизованное место для работы со всеми артефактами, которые вы создаете при использовании машинного обучения Azure (см. Что такое рабочая область машинного обучения Azure? Автора Microsoft).

Для нас, специалистов по обработке данных, среди других артефактов выделяются два: хранилища данных и наборы данных.

Хранилища данных - это просто абстрактные объекты, в которых хранится информация о подключении, чтобы вы могли безопасно получить доступ к своим службам хранения Azure, таким как контейнер BLOB-объектов Azure, общий файловый ресурс Azure, база данных SQL Azure и т. д. Для целей этого руководства я буду Предположим, что у вас уже есть зарегистрированное хранилище данных в вашей рабочей области Azure ML.

Наборы данных - это другое животное. Наборы данных машинного обучения Azure не являются копиями ваших данных. При создании набора данных вы просто создаете ссылку на данные в службе хранилища вместе с копией его метаданных (см. Защищенный доступ к данным в машинном обучении Azure от Microsoft). Как правило, вы создаете набор данных для конкретного проекта в области науки о данных, который вы имеете в виду, и используете его, чтобы указать на конкретный узкий набор данных в ваших доступных хранилищах данных.

Что это значит для нас? Это означает, что при загрузке локальных данных для использования в машинном обучении в Azure мы на самом деле не загружаем набор данных. Мы загружаем файл в одну из наших служб хранения, затем создаем абстракцию «хранилище данных», чтобы указать на этот файл, а затем мы создаем абстракцию «набор данных», чтобы указать на файл в этом хранилище данных. Кажется, много избыточных уровней, но на это есть веская причина - вы увидите это, когда начнете работать с Azure ML.

Итак, что мы пытаемся сделать?

Теперь к сценарию. Допустим, вы используете полностью автоматизированный конвейер обработки данных, ориентированный на код. Вы используете Azure ML SDK для R для запуска всех частей процесса - присоединения вычислений, отправки экспериментов, регистрации моделей и т. Д. Иногда в рамках этого процесса вам потребуется создать новый зарегистрированный набор данных в Машинном обучении Azure, чтобы ссылаться на него на последующих этапах, в которых используются ресурсы Azure ML. Возможно, это файл .csv из вашей локальной файловой системы. Или промежуточный фрейм данных, который вы создали в R и записали как файл .csv на диске.

Естественно, один из способов - загрузить его через пользовательский интерфейс. Это довольно просто - просто следуйте инструкциям мастера, и все готово.

Но, как вы знаете, в большинстве случаев «люди нажимают кнопки» - это довольно неэффективный способ перемещения данных. Итак, что, если вы хотите сделать то же самое с кодом, не касаясь пользовательского интерфейса? Для этого есть простое решение с помощью Azure ML R SDK.

Шаг 1. Получите рабочее пространство и хранилище данных

Откройте предпочтительную среду IDE для R (я использую R Studio на рабочем столе), и все готово.

Перво-наперво - загрузите библиотеку SDK Azure ML R.

library(azuremlsdk)

Теперь вам нужно сообщить R, в какой машинной рабочей области Azure вы будете работать (помните, что это ресурс верхнего уровня, своего рода «мастер-объект»). Для этого вам нужно передать 3 вещи: идентификатор подписки, группу ресурсов и имя рабочей области. К счастью, вы можете просто загрузить файл конфигурации из пользовательского интерфейса Azure ML, как показано ниже, и использовать этот файл для доступа к своей рабочей области.

Содержимое файла будет выглядеть так:

{
    "subscription_id": "8op1z128-9165-187m-qdf3-479251p987po",
    "resource_group": "my_resource_group",
    "workspace_name": "MLWorkspace"
}

Сохраните этот файл в рабочем каталоге сеанса R, чтобы вы могли легко ссылаться на него в своем коде R.

Теперь вы готовы создать объект рабочей области Azure ML в среде R. Это делается с помощью функции load_workspace_from_config() из библиотеки azuremlsdk (мне нравятся эти понятные имена функций). Все, что ему нужно, это только что загруженный файл конфигурации. Назовем новый объект рабочая область.

workspace <- load_workspace_from_config("config.json")

NB! При первой загрузке рабочей области могут возникнуть проблемы с аутентификацией. Обратитесь к статье Луки выше (и другим его сообщениям), чтобы понять, как аутентификация работает с Azure ML SDK.

Теперь вам нужно использовать команду get_datastore(), чтобы создать объект, содержащий информацию о вашем хранилище данных. Это просто объект R, к которому вы можете обратиться позже в своем коде, чтобы указать хранилище данных Azure ML, которое вы хотите использовать.

datastore <- get_datastore(workspace = workspace, 
                           datastore_name = “workspaceblobstore”

Аргумент datastore_name - это просто имя хранилища данных, которое вы можете увидеть в пользовательском интерфейсе. В моем случае я использую хранилище данных по умолчанию workspaceblobstore:

Шаг 2. Загрузите файл в хранилище данных

Во-первых, давайте определим файл, который вы хотите загрузить. Все, что вам нужно, - это абсолютный локальный путь к файлу. Что-то вроде этого: ”C: /Users/lv01nst/datasets/azure/my_data.csv”

Давайте запишем этот путь в объект R с именем file_path для дальнейшего использования.

file_path <- "C:/Users/lv01nst/datasets/azure/my_data.csv"
files <- list(file_path)

Обратите внимание, что я также создаю объект списка с именем files. Почему это делается? SDK поддерживает загрузку нескольких файлов одновременно с использованием списка путей к файлам. Вы можете передать этот список в качестве аргумента функции upload_files_to_datastore(), о которой я расскажу ниже. Но если вы хотите загрузить только один файл, зачем вам список? Что ж, есть ошибка, которая вызывает ошибку, если вы просто передаете единственный строковый объект в аргумент files функции загрузки. Microsoft работает над этим, но в настоящее время вам нужно обернуть свой путь в виде списка, даже если вы хотите загрузить один файл.

Перед загрузкой файлов в хранилище данных вам необходимо указать точный каталог в хранилище данных, куда вы хотите загрузить файл. В студии Azure ML есть удобный способ просмотра файловой структуры в вашем хранилище данных, как вы можете видеть здесь:

Здесь вы можете увидеть дерево каталогов, которое существует в вашем хранилище данных. Папки azureml и UI существуют по умолчанию. Первый содержит все виды стандартных данных, сгенерированных действиями Azure ML, второй - это каталог по умолчанию для файлов, загружаемых через пользовательский интерфейс.

Теперь давайте определим путь, по которому мы хотим загрузить наш локальный файл. Для удобства вы можете сохранить его в отдельном объекте R:

target_path <-  "UI/my_datasets"

NB! Помните, что если вы укажете путь с несуществующим каталогом, он создаст его автоматически, что довольно удобно.

Теперь давайте загрузим фактические данные. Функция azuremlsdk для этого - upload_files_to_datastore() . Вам не нужно записывать это в объект R: просто запустите его, и загрузка будет выполнена.

upload_files_to_datastore(datastore = datastore, 
                          files = files, 
                          target_path = target_path)

Вы также можете использовать необязательные параметры ИСТИНА / ЛОЖЬ overwrite и show_progress, которые не требуют пояснений.

Теперь вы сможете увидеть этот файл в браузере хранилища данных:

Однако это еще не набор данных ...

Шаг 3. Создайте набор данных из файла хранилища данных

Теперь наличия файла в хранилище данных недостаточно, чтобы использовать его как часть конвейеров машинного обучения. Вам необходимо явно определить набор данных. Мы уже видели, как это выглядит в пользовательском интерфейсе, но с пакетом SDK для Azure ML R вы можете использовать команду create_tabular_dataset_from_delimited_files().

Единственный обязательный аргумент, который он ожидает, - это path. Это путь к файлу, который вы только что загрузили в хранилище данных.

Конечно, вы можете использовать полный абсолютный путь (что-то вроде https://mlworkspace2661079118.blob.core.windows.net/azureml-blobstore-61fk55c6-41qz-910f-bddd-086a0a690ac2/UI/my_datasets/my_data.csv), но мне удобнее использовать функцию data_path() из azuremlsdk. Это поможет вам создать аккуратный объект, который позже вы сможете передать функции для создания набора данных. Вот как это выглядит:

datapath <- data_path(datastore = datastore, 
                      path_on_datastore = "UI/my_datasets/my_data.csv")

В этом случае вы просто должны передать свой объект хранилища данных (а вы уже создали его) и конкретный путь к файлу в этом хранилище данных.

Почти готово! Осталась пара маленьких шагов.

Теперь создайте объект набора данных, который будет содержать всю необходимую информацию для создания зарегистрированного набора данных. Затем вы сможете передать его register_dataset() функции на следующем шаге. Давайте назначим его объекту с именем dataset_to_create.

dataset_to_create <- create_tabular_dataset_from_delimited_files(path = datapath)

Эта функция имеет множество других необязательных аргументов, которые просто имитируют те, которые вы увидите при создании набора данных из пользовательского интерфейса: определение разделителя, необходимость вывода типов столбцов и т. Д.

Шаг 4. Зарегистрируйте набор данных

Вам необходимо зарегистрировать набор данных, если вы хотите повторно использовать и совместно использовать наборы данных в своих экспериментах. Просто используйте register_dataset() функцию, передайте объект рабочего пространства и объект набора данных в качестве аргументов, дайте красивое имя своему набору данных - и все готово!

register_dataset(workspace = workspace, 
                             dataset_to_create, 
                             name = "my_dataset")

Сделанный!

Теперь вы можете увидеть набор данных в своем списке зарегистрированных наборов данных в студии.

Вы можете использовать его в своих конвейерах машинного обучения Azure, созданных в студии, или - что ж, - обратно в Azure ML R SDK! Для этого используйте функцию get_dataset_by_name()… но оставим ее до следующего раза.

Оставайтесь в курсе!

TL; DR - полный фрагмент кода ниже

# Load library
library(azuremlsdk)
# Create objects for workspace and datastore
workspace <- load_workspace_from_config("config.json")
datastore <- get_datastore(workspace = workspace, 
                           datastore_name = "workspaceblobstore")
# Get your file and wrap file path into a list
file_path <- "C:/Users/lv01nst/datasets/azure/my_data.csv"
files <- list(file_path)
# Define to which directory in datastore the file will be uploaded
target_path <-  "UI/my_datasets"
# Upload selected files to datastore
upload_files_to_datastore(datastore = datastore, 
                          files = files, 
                          target_path = target_path,
                          overwrite = TRUE,
                          show_progress = TRUE)
# Get path to uploaded file in datastore
datapath <- data_path(datastore = datastore, 
                      path_on_datastore = "UI/my_datasets/my_data.csv")
# Create dataset from that path
dataset_to_create <- create_tabular_dataset_from_delimited_files(path = datapath)
# Register created dataset
register_dataset(workspace = workspace, 
                 dataset_to_create, 
                 name = "my_dataset")

Присоединяйтесь к FAUN: Веб-сайт 💻 | Подкаст 🎙️ | Twitter 🐦 | Facebook 👥 | Instagram 📷 | Группа Facebook 🗣️ | Группа Linkedin 💬 | Slack 📱 | Cloud Native Новости 📰 | Еще .

Если этот пост был полезен, нажмите несколько раз кнопку хлопка 👏 ниже, чтобы выразить поддержку автору 👇