Ошибка при попытке использовать Dask в Kubernetes с распределенными рабочими процессами

Я пытаюсь развернуть даск-приложение в Kubernetes/Azure. У меня есть сервер приложений Flask, который является клиентом планировщика/работников Dask.

Я установил оператора Dask, как описано здесь:

helm install --repo https://helm.dask.org --create-namespace -n dask-operator --generate-name dask-kubernetes-operator

Это создало планировщик и рабочие модули, у меня они работают в Kubernetes без ошибок.

Для приложения Flask у меня есть образ Docker со следующим файлом Dockerfile:

FROM daskdev/dask

RUN apt-get -y install python3-pip

RUN pip3 install flask 
RUN pip3 install gunicorn 
RUN pip3 install "dask[complete]"
RUN pip3 install "dask[distributed]" --upgrade
RUN pip3 install "dask-ml[complete]"

Всякий раз, когда я пытаюсь запустить функцию в воркерах, используя интерфейс Client, я получаю эту ошибку в модуле планировщика:

TypeError: update_graph() got an unexpected keyword argument 'graph_header'

Мне кажется, что образ Dask, используемый для запуска Flask, и установленный мной Dask Kubernetes несовместимы или не согласованы?

Как создать образ, включающий Dask для сервера Flask, который можно интегрировать с пакетом Dask Kubernetes?

Я запускаю Flask client.get_versions(check=True) и вот что получаю:

{'scheduler': {'host': {'python': '3.8.15.final.0', 'python-bits': 64, 'OS': 'Linux', 'выпуск ОС': '5.4. 0-1105-azure», «машина»: «x86_64», «процессор»: «x86_64», «порядок байтов»: «маленький», «LC_ALL»: «C.UTF-8», «LANG»: «C. UTF-8'}, 'пакеты': {'python': '3.8.15.final.0', 'dask': '2023.1.0', 'распределенный': '2023.1.0', 'msgpack': ' 1.0.4», «cloudpickle»: «2.2.0», «торнадо»: «6.2», «toolz»: «0.12.0», «numpy»: «1.24.1», «панды»: «1.5. 2', 'lz4': '4.2.0'}}, 'рабочие': {'tcp://10.244.0.3:40749': {'хост': {'python': '3.8.15.final.0 ', 'python-bits': 64, 'ОС': 'Linux', 'выпуск ОС': '5.4.0-1105-azure', 'машина': 'x86_64', 'процессор': 'x86_64', 'byteorder': 'little', 'LC_ALL': 'C.UTF-8', 'LANG': 'C.UTF-8'}, 'packages': {'python': '3.8.15.final.0 ', 'dask': '2023.1.0', 'distributed': '2023.1.0', 'msgpack': '1.0.4', 'cloudpickle': '2.2.0', 'tornado': '6.2', 'toolz': '0.12.0', 'numpy': '1.24.1', 'панды': '1.5.2', 'lz4': '4.2.0'}}, 'tcp://10.244.0.4 :36757': {'хост': {'python': '3.8.15.final.0', 'биты python': 64, 'ОС': 'Linux', 'выпуск ОС': '5.4.0 -1105-azure», «машина»: «x86_64», «процессор»: «x86_64», «порядок байтов»: «маленький», «LC_ALL»: «C.UTF-8», «LANG»: «C.UTF -8'}, 'пакеты': {'python': '3.8.15.final.0', 'dask': '2023.1.0', 'распределенный': '2023.1.0', 'msgpack': '1.0 .4», «cloudpickle»: «2.2.0», «торнадо»: «6.2», «toolz»: «0.12.0», «numpy»: «1.24.1», «панды»: «1.5.2». ', 'lz4': '4.2.0'}}, 'tcp://10.244.1.7:40561': {'host': {'python': '3.8.15.final.0', 'python-bits ': 64, 'ОС': 'Linux', 'выпуск ОС': '5.4.0-1105-azure', 'машина': 'x86_64', 'процессор': 'x86_64', 'байтовый порядок': 'маленький ', 'LC_ALL': 'C.UTF-8', 'LANG': 'C.UTF-8'}, 'packages': {'python': '3.8.15.final.0', 'dask': «2023.1.0», «распространенный»: «2023.1.0», «msgpack»: «1.0.4», «cloudpickle»: «2.2.0», «торнадо»: «6.2», «toolz»: «0.12». .0", "numpy": "1.24.1", "панды": "1.5.2", "lz4": "4.2.0"}}}, "клиент": {'хост': {'python' : '3.8.16.final.0', 'биты python': 64, 'ОС': 'Linux', 'выпуск ОС': '5.4.0-1105-azure', 'машина': 'x86_64' , 'процессор': 'x86_64', 'байтовый порядок': 'маленький', 'LC_ALL': 'C.UTF-8', 'LANG': 'C.UTF-8'}, 'пакеты': {'python' : '3.8.16.final.0', 'dask': '2023.4.0', 'распределенный': '2023.4.0', 'msgpack': '1.0.5', 'cloudpickle': '2.2.1' , 'торнадо': '6.2', 'toolz': '0.12.0', 'numpy': '1.23.5', 'панды': '2.0.0', 'lz4': '4.3.2'}} } @ 2023-04-20 13:33:09.921545"}

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Решено, просто заставил Dockerfile использовать версию 2023.1.0, которая устранила проблему и соответствовала версии оператора dask.

Спасибо за обмен вашего опыта. Это может помочь другим.

mdurant 20.04.2023 18:54

Другие вопросы по теме