前提・実現したいこと
pythonプログラムを複数のPCで並列実行し、分散コンピューティングを実現したいです。
これを試すために2台のPC(AWSのEC2インスタンス、OSはWindows server 2019)を用意しています。
2つのインスタンスはIP固定で、互いに公開鍵によるSSH通信が可能になっており、「ssh test」で接続できるようにしています。
発生している問題・エラーメッセージ
公式サイトの以下のコード(参考:https://scoop.readthedocs.io/en/0.7/examples.html)を、「--host test」を指定して実行するとエラーが出てしまいます。
map_doc.py
1from __future__ import print_function 2from scoop import futures 3 4def helloWorld(value): 5 return "Hello World from Future #{0}".format(value) 6 7if __name__ == "__main__": 8 returnValues = list(futures.map(helloWorld, range(16))) 9 print("\n".join(returnValues))
上記ページのサンプルの通り
python -m scoop -n 8 map_doc.py
でなら正常に実行ができるのですが、
python -m scoop -n 8 --host test map_doc.py
だと下のエラーが出てしまいます。
[2020-11-12 20:30:46,725] launcher INFO SCOOP 0.7 1.1 on win32 using Python 3.9.0 (tags/v3.9.0:9cf6752, Oct 5 2020, 15:34:40) [MSC v.1927 64 bit (AMD64)], API: 1013 [2020-11-12 20:30:46,725] launcher INFO Deploying 8 worker(s) over 2 host(s). [2020-11-12 20:30:46,725] launcher INFO Worker distribution: [2020-11-12 20:30:46,725] launcher INFO 54.235.95.26: 3 + origin [2020-11-12 20:30:46,725] launcher INFO .\map_doc.py: 3 + origin ERROR:root:Error while launching SCOOP subprocesses: ERROR:root:Traceback (most recent call last): File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\scoop\launch\brokerLaunch.py", line 143, in __init__ self.brokerPort, self.infoPort = ports ValueError: not enough values to unpack (expected 2, got 1) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\scoop\launcher.py", line 479, in main rootTaskExitCode = thisScoopApp.run() File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\scoop\launcher.py", line 255, in run self.brokers.append(remoteBroker( File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\scoop\launch\brokerLaunch.py", line 153, in __init__ raise Exception("Could not successfully launch the remote broker.\n" Exception: Could not successfully launch the remote broker. Requested remote broker ports, received: b'' Port number decoding error: not enough values to unpack (expected 2, got 1) SSH process stderr: b'Traceback (most recent call last):\r\n File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 197, in _run_module_as_main\r\n return _run_code(code, main_globals, None,\r\n File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 87, in _run_code\r\n exec(code, run_globals)\r\n File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\scoop\broker\__main__.py", line 65, in <module>\r\n sys.stdout.write(str(os.getpgrp()) + "\n")\r\nAttributeError: module \'os\' has no attribute \'getpgrp\'\r\n' [2020-11-12 20:30:47,100] launcher INFO Finished cleaning spawned subprocesses. INFO:launcherLogger:Finished cleaning spawned subprocesses.
試したこと
■.ssh/configの書き換え
http://fx-kirin.com/python/python-scoop/
の方でssh config での host name が ノードの PC の名前かIPでないと、エラーが出る
とあったため、.ssh/configのHostをtest→IPアドレスに変更してみましたが、これは意味がありませんでした。(Hostの名前でなくHostNameの話だったのかもしれないです)
■SCOOPインストールのし直し
公式ドキュメントのインストール方法の個所にwindowsの場合はPyzmqをダウンロードページ(https://github.com/zeromq/pyzmq/downloads)でインストールするようにと書いてあったため、そちらでインストールし直しました。
これはpyzmqのバージョンが古いせいかSCOOPインストールの際にmyzmqをアンインストールしようとして、さらにアンインストール処理が失敗したため、結局pip install pyzmq
を使いました。
■Windows server 2016でも試す
これも同じエラーが出ました。
■sys.stdout.write(str(os.getpgrp()) + "\n")
を変更
良くないことと分かってはいますがライブラリの内部のscoop\broker\__main__.py
を書き換えました。
os.getpgrp()
でエラーが出ているため、
・エラーの出ないgetpid()
に書き換え
・当該行をコメントアウトする
・000
を返すようにしてみる
などしましたが、全て別種のエラーが表示され失敗しました。
コメントアウトはそもそもの戻り値がないため停止しました。
補足情報
全てAWSのEC2インスタンス上
OS:Windows Server 2019
python:3.9(pyenv, conda等なし)
pyzmqはpipコマンドでインストール
VIsual Studio Build Tools 2019インストール済み
SSH接続 公開鍵通信の設定済み
容量等は無料枠の範囲内で使用
表示されたエラーの
sys.stdout.write(str(os.getpgrp()) + "\n")\r\nAttributeError: module \'os\' has no attribute \'getpgrp\'\r\n''
を調べるとそもそもos.getpgrp()
はWindowsでは利用できない(https://docs.python.org/ja/3.5/library/os.html)ようなのですが、SCOOPを使った複数台のPCでの分散はWindowsでは不可能なのでしょうか?
公式ページにインストール手順などがあるので可能なのではと思いたいのですが、何か解決する方法はありませんでしょうか?
すみませんが、よろしくお願いいたします。
あなたの回答
tips
プレビュー