Я создал свой собственный, очень немного измененный Dockerfile
на основе dask-docker
Dockerfile
, который устанавливает adlfs
и копирует одну из моих пользовательских библиотек в контейнер, чтобы сделать ее доступной для все рабочие узлы. Я развернул свой контейнер в своем кластере Kubernetes и подключился к нему через REPL на моем локальном компьютере, создав клиент и функцию локально:
>>> def add1(n): return n + 1
...
>>> client = Client(my_ip + ':8786')
Но когда я запускаю client.submit
, я получаю либо distributed.protocol.pickle
сообщения об ошибках «Не удалось десериализовать b '...'», либо фьючерсы застряли в состоянии «ожидания»:
>>> f = client.submit(add1, 2)
>>> distributed.protocol.pickle - INFO - Failed to deserialize b'\x80\x05\x95\xba\x03\x00\x00\x00\x00\x00\x00\x8c\x16tblib.pickling_support...'
...
ValueError: unsupported pickle protocol: 5
>>>
>>> f = client.submit(add1, 2)
>>> f
<Future: pending, key: add1-d5d2ff94399d4bb4e41150868f4c6da7>
Кажется, что ошибка протокола рассола произойдет только один раз, когда я отправлю первое задание, потом все просто застряло в pending
.
Из kubectl
я вижу, что у меня есть:
- одна
LoadBalancer
служба с именем dask-scheduler
, - два развертывания: 1x
dask-scheduler
и 3x dask-worker
, - и соответствующий
dask-scheduler-...
и три dask-worker-...
pod
Что может вызвать это, и как я могу отладить? Я открыл веб-интерфейс для своего планировщика Dask, и он показывает, что у меня есть экземпляр add1
с ошибкой, но он не дает никаких подробностей.
Как бы то ни было, единственные изменения, которые я внес в Dockerfile
были:
# ...
&& find /opt/conda/lib/python*/site-packages/bokeh/server/static -type f,l -name '*.js' -not -name '*.min.js' -delete \
&& rm -rf /opt/conda/pkgs
RUN pip install adlfs==0.3.0 # new line
COPY prepare.sh /usr/bin/prepare.sh # existing line
COPY foobar.sh /usr/bin/foobar.sh # new line
COPY my_file.so /usr/bin/my_file.so # new line
Edit : отмечу, что если я разверну образ Dask (image: "daskdev/dask:2.11.0"
в моем манифесте K8s), все будет работать нормально. Итак, при попытке создать индивидуальный образ Docker, что-то, кажется, неправильно настроено с помощью Dask. Я закомментировал свои изменения в Dockerfile
, запустил docker rmi
на моем локальном образе и ACR , разорвал развернутую службу и развертывания, затем перестроил контейнер, подтолкнул его и выполнил развертывание, но это по-прежнему не удается.