В настоящее время я запускаю скрипты Python 3.5 на двух экземплярах виртуальной машины в GCP из локального сеанса PyCharm, работающего на моем Mac (подробные спецификации среды см. Ниже).
У меня есть два разных проекта в GCP, которые выглядят одинаково,Я проверил их настройку с нашим облачным администратором, и мы не видим никаких существенных отличий, по крайней мере, тривиальных.Я создал два образа Deep Learning на GCP, используя следующую облачную командную строку SDK, по одной в каждом проекте:
export PROJECT=[MY_PROJECT_NAME]
export INSTANCE_ROOT=$USER-vm
export ZONE=europe-west4-a
export IMAGE_FAMILY=tf-latest-gpu
export INSTANCE_TYPE=n1-highmem-8
export GPU_TYPE=v100
export GPU_COUNT=1
export INSTANCE_NAME=$INSTANCE_ROOT-$GPU_TYPE-$GPU_COUNT
gcloud compute instances create $INSTANCE_NAME \
--zone=$ZONE \
--image-family=$IMAGE_FAMILY \
--image-project=deeplearning-platform-release \
--maintenance-policy=TERMINATE \
--accelerator=type=nvidia-tesla-$GPU_TYPE,count=$GPU_COUNT \
--machine-type=$INSTANCE_TYPE \
--boot-disk-size=200GB \
--metadata=install-nvidia-driver=True \
--scopes=storage-rw
Оба изображения полностью похожи.
Я настроил два удаленных интерпретатора ssh в PyCharmи развернул мой код Python на обеих виртуальных машинах.Все абсолютно одинаково с точки зрения конфигурации экземпляра виртуальной машины (ОС, версия / библиотеки Python, исходный код и т. Д.) И конфигурации удаленного интерпретатора PyCharm.В обоих случаях входное соединение ssh с экземпляром (на порту 22) работает довольно хорошо.
Тем не менее, при вызове plt.show()
для отображения изображений с помощью matplotlib изображения отображаются в одной настройке, но не вдругой.
Это не вопрос установки правильной конфигурации ssh (опция -X
в командной строке, X11Forwarding
и т. д.).Я уже проверил это, и в любом случае одна из моих виртуальных машин довольно неплохо справляется с отображением моих изображений в этой конфигурации.
Я отладил выполнение и обнаружил, что PyCharm автоматически обрабатывает отображение X, реализуя собственный matplotlib FigureCanvas
,В удаленном ssh функция show()
фактически открывает сокет на указанном хосте (то есть на моем локальном Mac) и отправляет отображаемый буфер:
sock = socket.socket()
sock.connect((HOST, PORT))
[..]
sock.send(buffer)
Именно в этом случае две мои конфигурации расходятся:
Один рабочий пытается подключиться к localhost:53725
и успешно: <socket.socket fd=28, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 42316), raddr=('127.0.0.1', 53725)>
Один не удается подключиться к localhost:53725
но также получает исключение.
Мое самое сильное предположение состоит в том, что некоторая конфигурация сети в двух проектах GCP несколько отличается и препятствует соединению на localhost:53725
для второго.Однако, кроме этого, я понятия не имею, что может произойти и / или как это исправить.
Любая идея / предложение будет оценено.
Спасибо, Лоран
-
Подробные спецификации среды: PyCharm 2018.2.4 (Professional Edition), сборка № PY-182.4505.26, построена 19 сентября 2018 г. Лицензия для PyCharm Evaluator Дата окончания срока действия: 27 октября 2018 г. JRE: 1.8.0_152-release-1248-b8 x86_64 JVM: 64-битная виртуальная машина OpenJDK от JetBrains sro macOS 10.14