超初心者向け Swar Chia Plot Manager 導入方法
プロット作成方法を色々試行錯誤してきましたが、いい加減コマンドプロンプトたくさん開いてPlottingするのめんどくさい!となりました。
Twitterなどでも割と聞くようになってきたSwar Chia Plot Managerというのを使ってみたので紹介します。
「Pythonなんもわからん」でもなんとかなったので備忘録として残します。ただし質問されても答えられないかもしれません。返事がなかったら察してください。Windows10環境のお話です。
GitHubからダウンロード
上のリンクから飛んで頂いて、Code→Download ZIPで好きな場所に保存、解凍しておきましょう。
私は公式のInstallationに従ってDocumentsフォルダに入れました。
C:\Users\hyperbanana\Documents\Swar-Chia-Plot-Manager-main
ユーザー名は各自おきかえてください。
Pythonをインストール
Python 3.7以上であればOKみたいですが、よくわからんので最新版を入れます。現時点で3.9.5のようです。
オススメの通り、Windows Installer (64-bit)をダウンロードしましょう。
ダウンロードしたインストーラーを立ち上げます。デフォルトではオフになっていますが、「Add Python 3.9 to PATH」のチェックボックスをオンにしましょう。環境変数PATHを設定します。これをしないと後述のコマンドが動きません。
Install NowをクリックすればOK
閉じます。
Swar Chia Plot Managerをインストール
先程ダウンロードしたフォルダをエクスプローラで開きましょう。
C:\Users\hyperbanana\Documents\Swar-Chia-Plot-Manager-main
開いたらアドレスバーをクリックします。
アドレスバーに「cmd」と入力し、Enterを押します。
コマンドプロンプトが立ち上がりました。powershellでも良いみたいですがここは好みで。
Python仮想環境の作成
Pythonの仮想環境を作成します。コマンドプロンプトに下記コマンドを入力してEnter
python -m venv venv
2番目のvenvは好きな名前に変更できるそうですが、よくわからないので公式の手順どおりにしています。
「Swar-Chia-Plot-Manager-main」に「venv」というフォルダが作成されれば成功です。
このようにコマンドを入力しても「Python」とだけ出るようであればおそらく環境変数PATHが無いです。もしくは管理者権限でコマンドプロンプトを実行するなど色々試してみてください。
Python仮想環境をアクティブにする
仮想環境をアクティブにします。下記コマンドを入力してEnter
venv\Scripts\activate
頭に(venv)とでてくれば成功です。
必須モジュールインストール
必要なモジュールを入れます。下記コマンドを入力してEnter
pip install -r requirements.txt
スクショ取り忘れました。成功してるっぽければ成功。
設定ファイル作成
C:\Users\hyperbanana\Documents\Swar-Chia-Plot-Manager-main
ここにある「config.yaml.default」をコピーして「config.yaml」に名前を変えましょう。
コマンドでやるなら、copy config.yaml.default config.yaml
作った設定ファイルを開きましょう。メモ帳でもなんでもいいです。
コマンドでやるなら、notepad config.yaml
では実際に数値を記入していきましょう。#で始まる行はコメントなので、#が無い行を追記修正していきます。
chia.exeの場所
chia_location: C:\Users\hyperbanana\AppData\Local\chia-blockchain\app-1.1.6\resources\app.asar.unpacked\daemon\chia.exe
chia.exeの場所を記述します。GUIのChia.exeとは違うので注意してください。また、「chia location:」のコロンの後は半角スペースが入ります!単にアドレスをコピペすると半角スペースが無いのでエラーになります。(ハマった)
logの場所
folder_path: C:\Chia\Logs\Plotter
デフォルトでは「S:\Chia\Logs\Plotter」とかよくわからんドライブレターが勝手に書かれていますが、存在しないとエラーになりますので、自分で好きな場所を指定しましょう。ネットワークドライブを指定するとバグります。(ハマった)
globalの設定
max_concurrent: 6
システムが実行できるプロットの最大並列数
max_for_phase_1: 3
フェーズ1を実行できるプロットの最大数
minimum_minutes_between_jobs: 5
新しいジョブを開始するまでの最小時間(分)
jobの設定
- name: MX500
ジョブの名前。お好きな名前を。
max_plots: 999
マネージャー起動中に実行されるプロットの最大数、プロット作成コマンドの-n
と近い。
farmer_public_key:
ファーマー公開鍵。chiaセットアップ済みなら空欄でOK、秘密鍵を入れてないマシンで実行する場合は入れる。
pool_public_key:
プール公開鍵。上に同じ。
temporary_directory: D:\chiaTemp
一時ディレクトリを指定。リストを指定することもできます。その場合1つずつ循環して使われるみたい。リスト指定の仕方はデフォルトのジョブを参考にしてください。
temporary2_directory:
一時ディレクトリ2。入力するとフェーズ3,4がここで実行されます。
destination_directory: \\Qnap\home\ChiaPlotsMX500
保存先ディレクトリ。リスト指定すると循環します。
size: 32
kサイズ。そのままでいい。
bitfield: true
ビットフィールドを使用する?trueでいい。
threads: 8
スレッド数。フェーズ1のみ有効。フェーズ1の最大数を指定できるのでたくさん割り当てても大丈夫かも。
buckets: 128
バケット数。128でいい。HDDの場合64にすると少し効率が上がった気がする。
memory_buffer: 5000
RAM数。適当に。
max_concurrent: 2
このジョブの最大並列数。MX500は1TBだからもっと増やしても大丈夫だけど、増やしすぎると速度が落ちるので控えめ運用。
max_concurrent_with_start_early: 2
早期に開始されたフェーズを含む特定時点でのこのジョブのプロット最大数。よくわからんので上と同じ数値にしとく。もしかしたらフェーズ4まで行ったら新しいjob開始するやつかも。
initial_delay_minutes: 0
最初のジョブを開始するときに遅延させる(分)
stagger_minutes: 0
このジョブの次のプロットが開始されるまでの待機時間(分)
max_for_phase_1: 4
このジョブのフェーズ1のプロット最大数。
concurrency_start_early_phase: 4
早くプロットを開始したいフェーズ。このフィールドには4を使用することがオススメらしい。わからん。
concurrency_start_early_phase_delay: 0
初期段階の開始が検出されたときに、新しいプロットが開始されるまでの最大待機時間 (分)。
temporary2_destination_sync: false
宛先ディレクトリを常に一時ディレクトリ2として送信する。よくわからないけど、リストにしたとき用かな?
exclude_final_directory: true
ハーベスターへplotディレクトリ追加すをスキップするかどうか。HPOOL利用中だからスキップする。
skip_full_destinations: false
これを有効にすると、実行中のすべてのプロットと将来のプロットのサイズを計算して、保存先ドライブにジョブを開始するのに十分な空き容量があるかどうかを判断する。ない場合はスキップして次のDestに移動する。すべてがいっぱいになるとジョブが無効になる。
神機能じゃね!?と思ったがネットワークドライブを指定してるとエラーになってジョブが起動せずエラーになる(ハマった)
unix_process_priority: 10
Unixのみ。Win10だと意味ないだろうけどサンプルにかいてあったからそのままにしてる。削除でいいと思う。
windows_process_priority: 32
Windows10のプロットプロセスの優先順位。とりあえずデフォルトのNORMAL_PRIORITY_CLASSにしてる。
enable_cpu_affinity: false
使用するスレッドを指定できる。ハーベスターも兼ねている場合、1~2スレッドを指定から外すとハーベスターやノードのパフォーマンスが上がるようです。
cpu_affinity: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ]
上のやつをfalseにしてるから意味ないだろうけどなんとなく残してる。削除でいいと思う。
見づらくなったから一覧でもう一度載せとく。
- name: MX500 max_plots: 999 farmer_public_key: pool_public_key: temporary_directory: D:\chiaTemp temporary2_directory: destination_directory: \\Qnap\home\ChiaPlotsMX500 size: 32 bitfield: true threads: 8 buckets: 128 memory_buffer: 5000 max_concurrent: 2 max_concurrent_with_start_early: 2 initial_delay_minutes: 0 stagger_minutes: 0 max_for_phase_1: 4 concurrency_start_early_phase: 4 concurrency_start_early_phase_delay: 0 temporary2_destination_sync: false exclude_final_directory: true skip_full_destinations: false unix_process_priority: 10 windows_process_priority: 32 enable_cpu_affinity: false cpu_affinity: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ]
以上がSSDに2並列でplottingするジョブの設定です。
HDDの場合はこんな感じかな。USB HDDを3台つなげてるのでElements1~3の3つのジョブがあります。一つのジョブでtemporary_directoryをリスト表示にしてもいいと思うけど、ジョブを分けたほうが見やすかった。
- name: Elements1 max_plots: 999 farmer_public_key: pool_public_key: temporary_directory: F:\chiaTemp temporary2_directory: destination_directory: \\Qnap\home\ChiaPlotsMX500 size: 32 bitfield: true threads: 8 buckets: 128 memory_buffer: 5000 max_concurrent: 1 max_concurrent_with_start_early: 1 initial_delay_minutes: 0 stagger_minutes: 0 max_for_phase_1: 2 concurrency_start_early_phase: 4 concurrency_start_early_phase_delay: 0 temporary2_destination_sync: false exclude_final_directory: true skip_full_destinations: false unix_process_priority: 10 windows_process_priority: 32 enable_cpu_affinity: false cpu_affinity: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ]
実行
config.yamlの設定がおわったら実行しましょう。下記コマンドを入力してEnter
python manager.py start
バックグラウンドではじまります。
止めるときは
python manager.py stop
確認
進捗状況等を確認するには下記コマンドです。
python manager.py view
一覧で全部みれる!便利~~!
常に確認したいのではなく一度だけこの表示を確認したい場合は、
python manager.py status
設定変更方法
plottingとmanager.pyはそれぞれ独立して動いているため、manager.pyを途中で止めても問題ありません。進捗等はログファイルを読んでいるっぽいので、途中からでも進捗を認識してくれます。
viewを辞める方法は、Ctrl+C
config.yamlを編集し、それを反映したい場合は下記コマンドです。
python manager.py restart
そして再びviewに戻りましょう。
python manager.py view
バケット数などを変えた場合
進捗のパーセンテージはログファイルの行数で管理されているのかな。
config.yamlに次のような記述があります。
progress: # phase_line_end: These are the settings that will be used to dictate when a phase ends in the progress bar. It is # supposed to reflect the line at which the phase will end so the progress calculations can use that # information with the existing log file to calculate a progress percent. # phase_weight: These are the weight to assign to each phase in the progress calculations. Typically, Phase 1 and 3 # are the longest phases so they will hold more weight than the others. phase1_line_end: 801 phase2_line_end: 834 phase3_line_end: 2474 phase4_line_end: 2620 phase1_weight: 33.4 phase2_weight: 20.43 phase3_weight: 42.29 phase4_weight: 3.88
しかしですね、例えばバケット数を64にした場合、ログの行数がだいぶずれるんです。
そんなときはこれ!
python manager.py analyze_logs
ログファイルを解析して丁度いいprogressの値を出してくれます。
progress: phase1_line_end: 419 phase2_line_end: 452 phase3_line_end: 1293 phase4_line_end: 1375 phase1_weight: 30.93 phase2_weight: 16.05 phase3_weight: 37.58 phase4_weight: 15.44
こんな感じに書き換えるといい感じになりました。
リモート管理が捗る?
コマンドプロンプト1つで1台のPCを管理することができるようになりました。今までリモートデスクトップでつないでコマンドプロンプトを大量にならべているのを確認して…なんてことしなくてよくなるかも!?
ということで試しにWindows10にOpenSSHサーバーを設定してteratermでアクセスしてみました。
いい感じにコンパクトになったんじゃないの!?と喜んだものの、どうやらssh接続しているとジョブの開始に失敗するようですね…
[15860] Failed to execute script chia Traceback (most recent call last): File "win32ctypes\pywin32\pywintypes.py", line 35, in pywin32error File "win32ctypes\pywin32\win32cred.py", line 66, in CredRead File "win32ctypes\core\cffi\_authentication.py", line 147, in _CredRead File "win32ctypes\core\cffi\_util.py", line 81, in __call__ File "win32ctypes\core\cffi\_util.py", line 92, in _raise_error OSError: [WinError 1312] 指定されたログオン セッションは存在しません。そのセッションは既に終了している可能性があります。 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "chia\cmds\chia.py", line 81, in <module> File "chia\cmds\chia.py", line 77, in main File "click\core.py", line 829, in __call__ File "click\core.py", line 782, in main File "click\core.py", line 1259, in invoke File "click\core.py", line 1259, in invoke File "click\core.py", line 1066, in invoke File "click\core.py", line 610, in invoke File "click\decorators.py", line 21, in new_func File "chia\cmds\plots.py", line 135, in create_cmd File "chia\plotting\create_plots.py", line 57, in create_plots File "chia\plotting\create_plots.py", line 28, in get_farmer_public_key File "chia\util\keychain.py", line 200, in get_first_private_key File "chia\util\keychain.py", line 142, in _get_pk_and_entropy File "keyring\core.py", line 55, in get_password File "keyring\backends\Windows.py", line 100, in get_password File "keyring\backends\Windows.py", line 111, in _get_password File "win32ctypes\pywin32\win32cred.py", line 71, in CredRead File "contextlib.py", line 130, in __exit__ File "win32ctypes\pywin32\pywintypes.py", line 37, in pywin32error win32ctypes.pywin32.pywintypes.error: (1312, 'CredRead', '指定されたログオン セッションは存在しません。そのセッションは既に終了している可能性があります。')
もしこのエラーの回避方法を知っている方がいらっしゃいましたらアドバイスいただけると嬉しいです。
終わりに
Swar Chia Plot Managerは導入めんどくさいけど、とても便利でした。いままで手動でやっていた並列フェーズ1ずらしも自動でやってくれます。フェーズ1を実行する数も指定できるのが便利すぎる予感がしています。
Pythonなにそれ!?って人でもなんとかなるくらいを想定して詳しく書いてみました。もし参考になれば幸いです。詳しい人がみたら間違いだらけかもしれませんが、やばいところあったらご指摘いただければと思います。
ディスカッション
コメント一覧
たいへん役に立ちました。ありがとうございました。