Использование пользовательского docker с Azure ML - PullRequest
2 голосов
/ 14 июля 2020

Я следую рекомендациям (https://docs.microsoft.com/en-us/azure/machine-learning/how-to-use-environments), чтобы использовать собственный файл docker на Azure. Мой сценарий для создания окружения выглядит так:

from azureml.core.environment import Environment

myenv = Environment(name = "myenv")
myenv.docker.enabled = True
dockerfile = r"""
FROM mcr.microsoft.com/azureml/base:intelmpi2018.3-ubuntu16.04
RUN apt-get update && apt-get install -y libgl1-mesa-glx
RUN echo "Hello from custom container!"
"""
myenv.docker.base_image = None
myenv.docker.base_dockerfile = dockerfile

После выполнения он полностью игнорируется и libgl1 не устанавливается. Есть идеи, почему?

РЕДАКТИРОВАТЬ: вот остальная часть моего кода:

est = Estimator(
    source_directory = '.',
    script_params = script_params,
    use_gpu = True,
    compute_target = 'gpu-cluster-1',
    pip_packages = ['scipy==1.1.0', 'torch==1.5.1'],
    entry_script = 'AzureEntry.py',
    )

run = exp.submit(config = est)
run.wait_for_completion(show_output=True)

https://docs.microsoft.com/en-us/azure/machine-learning/how-to-use-environments

Ответы [ 5 ]

3 голосов
/ 14 июля 2020

Проблем с установкой библиотеки нет. Во-первых, выгрузите содержимое файла докеров в файл, чтобы его было легче поддерживать и читать;)

e = Environment("custom")
e.docker.base_dockerfile = "path/to/your/dockerfile"

установит содержимое файла в строку prop.

e.register(ws).build(ws).wait_for_completion()

шаг 2 / 16 будет иметь ваше обновление apt и libgl1 install

Обратите внимание, что это должно работать с> = 1.7 SDK

2 голосов
/ 14 июля 2020

Это должно сработать:

from azureml.core import Workspace
from azureml.core.environment import Environment
from azureml.train.estimator import Estimator
from azureml.core.conda_dependencies import CondaDependencies
from azureml.core import Experiment

ws = Workspace (...)
exp = Experiment(ws, 'test-so-exp')

myenv = Environment(name = "myenv")
myenv.docker.enabled = True
dockerfile = r"""
FROM mcr.microsoft.com/azureml/base:intelmpi2018.3-ubuntu16.04
RUN apt-get update && apt-get install -y libgl1-mesa-glx
RUN echo "Hello from custom container!"
"""
myenv.docker.base_image = None
myenv.docker.base_dockerfile = dockerfile

## You need to instead put your packages in the Environment definition instead... 
## see below for some changes too

myenv.python.conda_dependencies = CondaDependencies.create(pip_packages = ['scipy==1.1.0', 'torch==1.5.1'])

Наконец, вы можете построить свой оценщик немного иначе:

est = Estimator(
    source_directory = '.',
#     script_params = script_params,
#     use_gpu = True,
    compute_target = 'gpu-cluster-1',
#     pip_packages = ['scipy==1.1.0', 'torch==1.5.1'],
    entry_script = 'AzureEntry.py',
    environment_definition=myenv
    )

И отправить его:

run = exp.submit(config = est)
run.wait_for_completion(show_output=True)

Позвольте нам знаю, работает ли это.

1 голос
/ 14 июля 2020

Я думаю, что вы используете оценщик. Оценщики создают свою собственную среду, если вы не установите параметр environment_definition, которого я не вижу в вашем фрагменте. Я смотрю на https://docs.microsoft.com/en-us/python/api/azureml-train-core/azureml.train.estimator.estimator?view=azure-ml-py.

Не пробовал, но я думаю, вы можете исправить это, изменив свой код на:

est = Estimator(
    source_directory = '.',
    script_params = script_params,
    use_gpu = True,
    compute_target = 'gpu-cluster-1',
    pip_packages = ['scipy==1.1.0', 'torch==1.5.1'],
    entry_script = 'AzureEntry.py',
    environment_definition = myenv
    )

run = exp.submit(config = est)
run.wait_for_completion(show_output=True)

You также может потребоваться переместить параметр use_gpu в определение среды, поскольку на странице SDK, на которую я ссылался выше, указано, что среда будет иметь приоритет над этим и парой других параметров оценки.

1 голос
/ 14 июля 2020

Дополнительные сведения об использовании Docker в средах см. В статье «Включить Docker https://docs.microsoft.com/azure/machine-learning/how-to-use-environments#enable - docker. В следующем примере показано, как загрузить docker шагов в виде строки.

   from azureml.core import Environment
   myenv = Environment(name="myenv")

   # Creates the environment inside a Docker container.
   myenv.docker.enabled = True

   # Specify docker steps as a string.
   dockerfile = r'''
   FROM mcr.microsoft.com/azureml/intelmpi2018.3-ubuntu16.04
   RUN echo "Hello from custom container!"
   '''

   # Alternatively, load from a file.
   #with open("dockerfiles/Dockerfile", "r") as f:
   #    dockerfile=f.read()

   myenv.docker.base_dockerfile = dockerfile
1 голос
/ 14 июля 2020

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

  1. возможно, base_dockerfile должен быть текстовым файлом (с содержимое внутри), а не строку? Я попрошу менеджера по окружению подробнее узнать, как это работает
  2. , другой вариант - использовать Azure Экземпляр контейнера (ACI). ACI создается автоматически при развертывании рабочего пространства Azure ML. См. этот выпуск GitHub для получения дополнительной информации об этом.
...