В SDK V1 я использую среду для вычислительного кластера со следующей строкой файла dockerfile:
azureml_env = Environment("my_experiment")
azureml_env.python.conda_dependencies = CondaDependencies.create(
pip_packages=["pandas", "databricks-connect==10.4"],
)
dockerfile = rf"""
FROM mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04:latest
RUN mkdir -p /usr/share/man/man1
RUN apt-get -y update \
&& apt-get install openjdk-19-jdk -y \
&& rm -rf /var/lib/apt/lists/*
"""
azureml_env.docker.base_image = None
azureml_env.docker.base_dockerfile = dockerfile
Итак, я использую mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04:latest, где у меня есть Python 3.8.
Но когда я перехожу на SDK V2, я получаю Python 3.10, который несовместим с моим databricks runtime, которому нужен Python 3.8.
Вот мой докер-файл:
FROM mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04:latest
RUN mkdir -p /usr/share/man/man1
RUN apt-get -y update \
&& apt-get install openjdk-19-jdk -y \
&& rm -rf /var/lib/apt/lists/*
COPY requirements.txt .
RUN pip install -r requirements.txt && rm requirements.txt
# set command
CMD ["bash"]
Я называю это так в Python:
azureml_env = Environment(
build=BuildContext(
path = "deploy/utils/docker_context", # Where is my dockerfile and other file to copy inside
),
name = "my_experiment",
)
azureml_env.validate()
self.ml_client.environments.create_or_update(azureml_env)
Почему я получаю не Python 3.8, а Python 3.10?
Действительно, у меня есть файл environments.yaml, но я им не пользуюсь. У меня есть pip.conf и я requirements.txt, которые я копирую в файл docker. И действительно, в файле yml есть python3.10. Я постараюсь использовать только этот файл yml с другой версией Python. Спасибо.
@JayashankarGS, я изменил файл docker, удалив pip install -U requirements.txt, и изменил файл yml на python3.8. Но он не устанавливает никаких пакетов Python. Нужно ли мне изменить свой файл docker, чтобы принять во внимание файл yml?






Вы не можете предоставить файл conda.yaml при использовании контекста сборки Docker. Таким образом, вам необходимо создать среду conda и файл Dockerfile, как показано ниже:
FROM mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04:latest
WORKDIR /
ENV CONDA_PREFIX=/azureml-envs/sklearn-1.0
ENV CONDA_DEFAULT_ENV=$CONDA_PREFIX
ENV PATH=$CONDA_PREFIX/bin:$PATH
# This is needed for MPI to locate libpython
ENV LD_LIBRARY_PATH=$CONDA_PREFIX/lib:$LD_LIBRARY_PATH
# Create conda environment
COPY conda_dependencies.yaml .
RUN conda env create -p $CONDA_PREFIX -f conda_dependencies.yaml -q && \
rm conda_dependencies.yaml && \
conda run -p $CONDA_PREFIX pip cache purge && \
conda clean -a -y
RUN mkdir -p /usr/share/man/man1
RUN apt-get -y update \
&& apt-get install openjdk-19-jdk -y \
&& rm -rf /var/lib/apt/lists/*
COPY requirements.txt .
RUN pip install -r requirements.txt && rm requirements.txt
# Set command
CMD ["bash"]
Здесь я сначала создаю среду conda с Python версии 3.8 и запускаю оставшиеся команды.
conda_dependencies.yaml
name: pydata-example
channels:
- conda-forge
dependencies:
- python=3.8
- pip=21.2.4
- pip:
- numpy==1.22
- scipy==1.7.1
- pandas==1.3.0
- scikit-learn==0.24.2
- adlfs==2021.9.1
- fsspec==2021.8.1
env_docker_context = Environment(
build=BuildContext(path = "docker-contexts/tst"),
name = "docker-context-example-1",
description = "Environment created from a Docker context."
)
ml_client.environments.create_or_update(env_docker_context)
Выход:

И в окружении:

Если вы хотите избежать этих команд, вы можете попробовать использовать другие изображения с Python 3.8.
Спасибо за подробное объяснение. Оно работало завораживающе. Мне до сих пор кажется странным, что в V1 мы можем делать с SDK то, чего не можем в V2. Это очень сбивает с толку, пытаясь перенести все
Рад, что это сработало. Я все еще пытаюсь найти причину
Какие файлы у вас внутри
deploy/utils/docker_context. У вас есть файл conda yaml?