Я настраиваю Azure Пакетный рабочий процесс, который включает в себя задание, выполняемое внутри контейнера docker. Типичная пакетная настройка с контейнером включает определение функции add_tasks
, которое устанавливает различные настройки контейнера и команды, которые передаются для фактического выполнения задания. Соответствующие элементы моей функции add_tasks
следующие:
task_container_settings=batchmodels.TaskContainerSettings(
image_name=config._DOCKER_IMAGE,
container_run_options='--rm'
)
и:
task = batchmodels.TaskAddParameter(
id=task_id,
command_line="conda run -n pointcloudz python /classify.py {} {}".format(
input_file, output_file),
container_settings=task_container_settings,
user_identity=batchmodels.UserIdentity(auto_user=user)
)
Согласно документации Azure Batch, container_run_options
устанавливается с помощью task_container_settings
передаются на docker create
. Аргумент command_line
task
должен переопределить любой ENTRYPOINT
, определенный в Dockerfile
. Я попытался передать необходимые аргументы (input_file
и output_file
), используя различные комбинации container_run_options
из task_container_settings
и command_line
. Независимо от комбинации, задание никогда не завершится и будет выполняться в течение 30 минут до истечения времени ожидания. Нет сообщения об ошибке.
Следующая комбинация команд docker create
и docker start
для контейнера за пределами Batch работает, как и ожидалось, что весьма разочаровывает:
docker create -i -t <my image> in.txt out.txt
docker start -a -i <resulting container>
Итак, предположительно, я мог бы просто передать аргументы input_file
и output_file
аргументу command_line
task
, но это не сработало. Для полноты, вот моя полная функция add_task
:
def add_tasks(batch_service_client, job_id, task_id, input_file, output_file):
"""
Adds a task for each input file in the collection to the specified job.
:param batch_service_client: A Batch service client.
:type batch_service_client: `azure.batch.BatchServiceClient`
:param str job_id: The ID of the job to which to add the tasks.
created for each input file.
:input_file: unclassified .las file
:output_file: classified .las file output
"""
print('Adding tasks to job[{}]...'.format(job_id))
user = batchmodels.AutoUserSpecification(
scope=batchmodels.AutoUserScope.task,
elevation_level=batchmodels.ElevationLevel.non_admin
)
task_container_settings=batchmodels.TaskContainerSettings(
image_name=config._DOCKER_IMAGE,
container_run_options='--rm'
)
task = batchmodels.TaskAddParameter(
id=task_id,
command_line="conda run -n pointcloudz python /classify.py {} {}".format(
input_file, output_file),
container_settings=task_container_settings,
user_identity=batchmodels.UserIdentity(auto_user=user)
)
batch_service_client.task.add(job_id, task)
и мой dockerfile (изображение извлекается из репозитория Azure как часть настройки Batch):
FROM continuumio/miniconda3
ADD . /pipegen
ADD environment.yml /tmp/environment.yml
RUN conda env create -f /tmp/environment.yml
RUN echo "conda activate $(head -1 /tmp/environment.yml | cut -d' ' -f2)" >> ~/.bashrc
ENV PATH /opt/conda/envs/$(head -1 /tmp/environment.yml | cut -d' ' -f2)/bin:$PATH
ENV CONDA_DEFAULT_ENV $(head -1 /tmp/environment.yml | cut -d' ' -f2)
ADD classify.py /classify.py
RUN rm -rf /pipegen
ENTRYPOINT ["conda", "run", "-n", "pointcloudz", "python", "classify.py"]
Заранее спасибо за любую помощь здесь.