我如何创建一个气流任务,我将启动一个使用GPU的Docker容器。当从终端运行时,我只使用--gpus all
标志。我不能使用DockerOperator这样做,因为它不支持device_requests参数,当调用docker运行时使用--gpus all
标志。
好吧,对未来的任何人来说——我明白了。首先,您需要将docker守护进程套接字挂载到一个气流docker容器中。通过更改docker-compose文件,在气流的volumes部分添加:
- /var/run/docker.sock:/var/run/docker.sock
然后你需要基于气流docker镜像创建一个新的docker镜像,并安装docker python SDK,例如:
# syntax=docker/dockerfile:1
FROM apache/airflow:2.2.0-python3.7
RUN pip install docker
,然后你可以创建基于PythonOperator的任务,在那里你使用docker库来创建新的容器。示例任务(输出不美观)
def start_gpu_container(**kwargs):
client = docker.from_env()
response = client.containers.run(
'tensorflow/tensorflow:latest-gpu',
'nvidia-smi',
device_requests=[
docker.types.DeviceRequest(count=-1, capabilities=[['gpu']])
]
)
return str(response)