1
votes

Comment modifier la version Python dans Azure Machine Learning sdk ContainerImage avec CondaDependencies

J'essaie d'intégrer mon modèle Faster R-CNN dans une instance de conteneur sur ACI. Pour cela, j'ai besoin que mon image docker possède la version 3.5 de python. *. Je le spécifie dans mon fichier conda yaml, mais chaque fois que je lance une instance et que docker exécute -it *** / bin / bash , je vois qu'il ne contient que Python 3.6.7.

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

Comment puis-je obtenir mon image Docker pour avoir la version Python 3.5. *? J'ai déjà essayé conda d'installer la version 3.5.2 de Python, mais cela n'a pas fonctionné car finalement il ne possédait pas 3.5.2, mais seulement 3.6.7. (dfimage vous permet de voir le dockerfile à partir duquel l'image a été créée, https: //hub.docker. com / r / chenzj / dfimage / ).

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

Mon yaml :

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)

Cellule du bloc-notes: depuis 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())

Une autre cellule de notebook avec des spécifications ContainerImage.

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

Remarque

Pour une meilleure lisibilité, consultez mon problème GitHub: ( https://github.com/Azure/MachineLearningNotebooks / issues / 163 ).


4 commentaires

Mes excuses. Je vois qu'il a déjà été supprimé. Merci.


La question elle-même semble correcte, mais je pense que vous avez reçu -4 pour le titre. Vous pouvez essayer de le supprimer et de le publier à nouveau, car celui-ci risque de ne pas avoir beaucoup de vues.


Il y a une étape dans Dockerfile qui est la suivante: Étape 13/16: RUN sed -i '/ ^ \ s * - \ s * python \ s * [<> =] / d' '/ var / azureml -app / conda.yaml '&& cat' /var/azureml-app/conda.yaml '. Il est donc impossible de définir quelle version de Python va être utilisée. Je suppose que cela a été fait pour éviter les problèmes avec d'autres versions mais, par exemple, pour moi, c'est un gros problème car je ne peux créer des images MLFlow qu'avec 3.5.2 ou 3.7.3 dans Databricks avec une erreur "opcode inconnu" lorsque déployer l'image.


@FernandoOrtega, merci pour cet indice. Je me cognais la tête là-dessus pendant des heures.


3 Réponses :


0
votes

MODIFIER:

Ce n'est plus un problème pour moi. J'ai trouvé un autre moyen de faire fonctionner mon code avec la version 3.6.7 de python.

C'est cependant toujours un problème si vous me le demandez. Si à l'avenir j'ai besoin de la version 3.5 de python, il n'y aura pas de solution pour le moment.

Vous pouvez toujours publier une réponse si vous le souhaitez.


0 commentaires

0
votes

Actuellement, la version de Python est corrigée sur ce qui se trouve dans l'image de base d'Azure ML, lors du déploiement du service Web. Nous envisageons de supprimer cette limitation à l'avenir.


0 commentaires

0
votes

Comme il s'agit de l'une des meilleures réponses de Google lors de la recherche de "azureml python version", je poste la réponse ici. La documentation n'est pas très claire à ce sujet, mais ce qui suit fonctionnera:

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)

Cela suppose la structure de répertoires suivante:

  • racine /
    • create_pipeline.py
    • pipeline /
      • test.py
      • environment.yml

où create_pipeline.py est le fichier ci-dessus, test.py est le script que vous souhaitez exécuter et environment.yml est le fichier d'environnement conda - y compris la version python.


0 commentaires