Как изменить версию Python в Azure Machine Learning SDK ContainerImage с помощью CondaDependencies

Я пытаюсь перевести мою модель Faster R-CNN в экземпляр контейнера на ACI. Для этого мне нужно, чтобы мой образ докера имел версию Python 3.5. *. Я указываю это в моем файле conda yaml, но каждый раз, когда я запускаю экземпляр и docker run -it *** /bin/bash в него я вижу, что он имеет только Python 3.6.7.

https://user-images.githubusercontent.com/21140767/50680590-82b20b80-1008-11e9-9bfe-4a0e71084ce0.png

Как я могу получить свой образ Docker для Python версии 3.5.*? Я уже пробовал conda, устанавливая Python версии 3.5.2, но это не сработало, так как в итоге у него не было 3.5.2, а только 3.6.7. (dfimage позволяет вам увидеть файл docker, из которого было создано изображение, https://hub.docker.com/r/chenzj/dfimage/).

https://user-images.githubusercontent.com/21140767/50680673-d6245980-1008-11e9-9d48-71a7c150d925.png

Мой ямл:

name: project_environment
dependencies:
- python=3.5.2

- pip:
  - matplotlib
  - opencv-python==3.4.3.18
  - azureml-core==1.0.6
  - numpy
  - cntk
  - cython
channels:
- anaconda

Ячейка записной книжки: из azureml.core.conda_dependencies import CondaDependencies

svmandss = CondaDependencies.create(python_version="3.5.2", pip_packages=[
    "matplotlib",
    "opencv-python==3.4.3.18",
    "azureml-core",
    "numpy",
    "cntk",
    "cython"], )
svmandss.add_channel('anaconda')

with open("fasterrcnn.yml","w") as f:
    f.write(svmandss.serialize_to_string())

Еще одна ячейка ноутбука со спецификациями ContainerImage.

image_config = ContainerImage.image_configuration(execution_script="score_fasterrcnn.py",runtime="python",conda_file="./fasterrcnn.yml",dependencies=listdir("utils"),docker_file="./Dockerfile")

service = Webservice.deploy_from_model(workspace=ws,
                                       name='faster-rcnn',
                                       deployment_config=aciconfig,
                                       models=[Model(workspace=ws, name='Faster-RCNN')],
                                       image_config=image_config)

service.wait_for_deployment(show_output=True)

Заметка

Для лучшей читабельности смотрите мою проблему с GitHub: ( https://github.com/Azure/MachineLearningNotebooks/issues/163).

4 ответа

В настоящее время при развертывании веб-службы версия Python соответствует базовому образу Azure ML. Мы расследуем устранение этого ограничения в будущем.

Поскольку это один из лучших ответов Google при поиске "версии azureml python", я отправляю ответ здесь. Документация не очень ясна, когда дело доходит до этого, но следующее будет работать:

from azureml.core import Workspace


from azureml.core.runconfig import RunConfiguration
from azureml.core.conda_dependencies import CondaDependencies

ws = Workspace.from_config()

# This is the important part
conda_dep = CondaDependencies(conda_dependencies_file_path="pipeline/environment.yml")
aml_run_config = RunConfiguration(conda_dependencies=conda_dep)

# Define compute target - must be preconfigured in th workspace
compute_target = ws.compute_targets['my-azureml-target']
aml_run_config.target = compute_target


from azureml.pipeline.steps import PythonScriptStep
script_source_dir = "./pipeline"
step_1_script = "test.py"

step_1 = PythonScriptStep(
    script_name=step_1_script,
    source_directory=script_source_dir,
    compute_target=compute_target,
    runconfig=aml_run_config,
    allow_reuse=True
)

from azureml.pipeline.core import Pipeline

# Build the pipeline
pipeline1 = Pipeline(workspace=ws, steps=[step_1])

from azureml.core import Experiment

# Submit the pipeline to be run
pipeline_run1 = Experiment(ws, 'Test-pipeline').submit(pipeline1)
pipeline_run1.wait_for_completion(show_output=True)

Это предполагает следующую структуру каталогов:

  • корень /
    • create_pipeline.py
    • трубопровод/
      • test.py
      • environment.yml

где create_pipeline.py - это файл выше, test.py - это сценарий, который вы хотите запустить, а environment.yml - файл среды conda, включая версию python.

Мне удалось изменить версию Python, зарегистрировав среду в Azure ML Workspace:

      from azureml.core.environment import Environment, Workspace
environment = Environment.from_conda_specification(name='myenv', file_path='environment.yml')
environment.python.user_managed_dependencies = False
workspace = Workspace.from_config()
environment = environment.register(workspace=workspace)
env_build = environment.build(workspace=workspace)

Затем настройте конечную точку для публикации следующим образом:

      from azureml.core.model import InferenceConfig
environment = Environment.get(workspace=workspace, name='myenv')
inference_config = InferenceConfig(
    entry_script='inference.py',
    source_directory='.',
    environment=environment
)

Используется пакет SDK для Azure ML 1.29.0. Возможно, это уже было исправлено, и оригинальный метод тоже работает, но я это не тестировал.

РЕДАКТИРОВАТЬ:

Это больше не проблема для меня. Я нашел другой способ заставить мой код работать с версией Python 3.6.7.

Это все еще проблема, если вы спросите меня. Если в будущем мне понадобится Python версии 3.5, то решения на данный момент не будет.

Вы все еще можете опубликовать ответ, если хотите.