Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

p2ch13/p2_run_everything.ipynbにつきまして #5

Open
KK-Saito opened this issue May 4, 2021 · 16 comments
Open

p2ch13/p2_run_everything.ipynbにつきまして #5

KK-Saito opened this issue May 4, 2021 · 16 comments

Comments

@KK-Saito
Copy link

KK-Saito commented May 4, 2021

はじめまして
PyTorch実践入門 を購入して、勉強しています。

Google ColaboratoryのGPU環境でp2_run_everything.ipynbを実行しています。
Google Driveをマウントして,なんとかChapter 12までは実行できて,TensorBoardも表示できたのですが,Chapter 13以降が実行できません。

具体的には,p2_run_everything.ipynbのChapter 13の最初のコマンド
 run('p2ch13.prepcache.LunaPrepCacheApp')
を実行すると,下記のようなエラーが出ます。

/usr/local/lib/python3.7/dist-packages/torch/_utils.py in reraise(self)
427 # have message field
428 raise self.exc_type(message=msg)
--> 429 raise self.exc_type(msg)
430
431

IndexError: Caught IndexError in DataLoader worker process 0.
Original Traceback (most recent call last):
File "/usr/local/lib/python3.7/dist-packages/torch/utils/data/_utils/worker.py", line 202, in _worker_loop
data = fetcher.fetch(index)
File "/usr/local/lib/python3.7/dist-packages/torch/utils/data/_utils/fetch.py", line 44, in fetch
data = [self.dataset[idx] for idx in possibly_batched_index]
File "/usr/local/lib/python3.7/dist-packages/torch/utils/data/_utils/fetch.py", line 44, in
data = [self.dataset[idx] for idx in possibly_batched_index]
File "/content/drive/My Drive/Colab Notebooks/Deep_Learning_with_PyTorch/p2ch13/dsets.py", line 399, in getitem
candidateInfo_tup.series_uid, candidateInfo_tup.center_xyz, (7, 96, 96)
File "/usr/local/lib/python3.7/dist-packages/diskcache/core.py", line 1889, in wrapper
result = func(*args, **kwargs)
File "/content/drive/My Drive/Colab Notebooks/Deep_Learning_with_PyTorch/p2ch13/dsets.py", line 244, in getCtRawCandidate
ct = getCt(series_uid)
File "/content/drive/My Drive/Colab Notebooks/Deep_Learning_with_PyTorch/p2ch13/dsets.py", line 239, in getCt
return Ct(series_uid)
File "/content/drive/My Drive/Colab Notebooks/Deep_Learning_with_PyTorch/p2ch13/dsets.py", line 112, in init
)[0]
IndexError: list index out of range

data-unversioned\cacheフォルダにpart2ch13_rawというフォルダは作られるのですが,キャッシュファイルが作成できていません。

せっかくpart2ch12までは実行できましたので,なんとかしてpart2ch13以降も動かしたいと思いますので,できましたらヒントをいただければ幸いです。

@Gin5050
Copy link
Owner

Gin5050 commented May 8, 2021

KK-Saitoさん
本書を活用していただきありがとうございます。
また、お返事が遅れてしまい申し訳ありません。

ご質問の件ですが、おそらくデータが足りてないと思われます。
実行に必要なファイル(3つのcsv)が存在しているか再度ご確認お願いいたします。
それでもエラーが起きる場合は、お手数ですが学習用のsubsetをsubset0~subset9まで揃えて実行できるか試していただけますでしょうか。

@KK-Saito
Copy link
Author

KK-Saito commented May 8, 2021

回答ありがとうございます。

3つのcsvファイルは確かに存在します。(part2ch12までは実行できていますので。)
データにつきましては,確かにsubset0だけで実行していました。
subset1~subset9も揃えて実行してみたいと思います。

データの保存場所についてですが,subset0のデータにつきましては
/content/drive/MyDrive/Colab Notebooks/Deep_Learning_with_PyTorch/data-unversioned/part2/luna/subset0
のフォルダに入れているのですが,
subset1~subset9のデータは
/content/drive/MyDrive/Colab Notebooks/Deep_Learning_with_PyTorch/data-unversioned/part2/luna/subset1
/content/drive/MyDrive/Colab Notebooks/Deep_Learning_with_PyTorch/data-unversioned/part2/luna/subset2
・・・
/content/drive/MyDrive/Colab Notebooks/Deep_Learning_with_PyTorch/data-unversioned/part2/luna/subset9
のように,フォルダを分けて保存すればよいのでしょうか?

@KK-Saito
Copy link
Author

KK-Saito commented May 8, 2021

もう一点,質問があるのですが,
 https://luna16.grand-challenge.org/download/
からダウンロードした
 seg-lungs-LUNA16
フォルダは,p2_run_everything.ipynbのpart2ch13以降の実行には必要ないのでしょうか?
セグメンテーションには必要な気がするのですが,テキストに記述はなかったと思いますが。

できれば御回答いただければ幸いです。

@Gin5050
Copy link
Owner

Gin5050 commented May 8, 2021

ご質問ありがとうございます。

1点目のデータの保存場所についてはその通りです。
p2ch13/dsets.pyの以下のように読み取るので参考までに載せておきます。

@functools.lru_cache(1)
def getCandidateInfoList(requireOnDisk_bool=True):
    # We construct a set with all series_uids that are present on disk.
    # This will let us use the data, even if we haven't downloaded all of
    # the subsets yet.
    mhd_list = glob.glob("data-unversioned/part2/luna/subset*/*.mhd")
    presentOnDisk_set = {os.path.split(p)[-1][:-4] for p in mhd_list}

2点目の内容ですが、本書では必要ありません。
seg-lungs-LUNA16の中身を見たわけではありませんが、おそらくセグメンテーションの教師データということで必要ではと思われたのだと推測します。
13章では3次元のCTデータと結節の位置情報から教師データの作成も行うので、テキスト記載のデータのみで可能です(P446 13.5.3をご参照ください)。

@KK-Saito
Copy link
Author

KK-Saito commented May 8, 2021

回答ありがとうございます。

現在,subset1~subset9をGoogle Driveにアップロードしているところです。
1つのsubsetをアップロードするのに1時間ほどかかるので,9時間ほどかかるようです。

seg-lungs-LUNA16につきましても,ありがとうございました。

subset0~subset9まで揃えて実行できればうれしいのですが,そろそろColab Proを契約しないと無理かもしれません。

@KK-Saito
Copy link
Author

KK-Saito commented May 9, 2021

ありがとうございました。

無事,p2_run_everything.ipynbのChapter 13の最初のコマンド
 run('p2ch13.prepcache.LunaPrepCacheApp')
が実行できました。

しかし,無料版のColabを使用しているので,実行時にディスクが68.4GBまでしか使用できないため,
2021-05-09 06:40:13,447 INFO pid:58 util.util:241:enumerateWithEstimate Stuffing cache 16/538, done at 2021-05-09 10:27:52, 3:54:12
の途中で
 OSError: [Errno 28] No space left on device
というエラーが出て止まってしまいました。

このため,Colab Proを契約するかどうか検討中です。

@KK-Saito
Copy link
Author

KK-Saito commented May 9, 2021

たびたび報告させていただきますが,Colab Proを契約したのですが,結局ディスク容量が足りません。

147.15GB使用できるのですが,
2021-05-09 07:52:03,967 INFO pid:78 util.util:241:enumerateWithEstimate Stuffing cache 64/538, done at 2021-05-09 10:31:39, 3:00:50
の途中で,
 OSError: [Errno 5] Input/output error: 'data-unversioned/cache/part2ch13_raw/031/56/92'
というエラーが出て,止まってしまいました。

そこで,半分のデータで実行してみようと思うのですが,
 subset0subset4
のデータを使うか,
 subset0
subset9 のそれぞれのsubsetの半分のデータ
を使うか迷っています。
半分のデータを使う場合,どちらがよろしいでしょうか?

また,そもそも半分のデータで実行できるのでしょうか?

できれば御回答いただけると助かります。

@KK-Saito
Copy link
Author

KK-Saito commented May 9, 2021

度々すみませんが,subset0~subset4のデータだけを使って実行してみたのですが,最初と同じ
 IndexError: list index out of range
エラーが出て止まってしまいました。
やはりsubset0~subset9のすべてのデータが揃っていないと動かないようです。

せっかくColab Proを契約しても,ディスク容量が147.15GBまでしか使用できないのでは,subset0~subset9のすべてのデータで実行することはできそうもありません。

どうすればGoogle Colabで実行できるのか,できればヒントをいただけると助かります。

@Gin5050
Copy link
Owner

Gin5050 commented May 11, 2021

KK-Saito さん

ご指摘の件ですが、コードを修正したので改善したと思われます。
p2ch13/dsets.pyp2_run_everything.ipynbの内容を修正しました。

お手数ですが、コードを置き換えて再度実行していただけますでしょうか?
今度はsubset0のみでも動作するはずです。
(再実行の際はcacheフォルダの削除をお願いします)

対応に時間がかかってしまい誠に申し訳ございません。

@KK-Saito
Copy link
Author

丁寧にご対応いただき,ありがとうございます。

明日にでも新しいファイルで再度実行してみたいと思います。

@KK-Saito
Copy link
Author

色々ご対応いただき,ありがとうございました。

無事,subset0のみでp2_run_everything.ipynbのChapter 13の部分が実行できました。
せっかくですから,エポック数を増やしてもう少しいろいろ試してみたいと思います。
また,subset0のみを使用した状態で,まだ79GBほどディスク容量が空いていますので,もう少しデータを増やしてやってみようと思います。

ただ,少し気になりますのは,元のp2_run_everything.ipynbにあった
 run('p2ch13.train_cls.LunaTrainingApp', f'--epochs={final_epochs}', '--balanced', '--augmented', 'final-cls')

 run('p2ch13.train_seg.LunaTrainingApp', f'--epochs={seg_epochs}', '--augmented', 'final-seg')
は実行できませんでしたが,日本語版ではこの部分は用意していないということでしょうか?
ご用意いただいた,
 run('p2ch13.training.SegmentationTrainingApp', f'--epochs={experiment_epochs}', '--augmented')
でTensorBoardの出力も確認できましたので,これで問題ないとは思いますが。

@Gin5050
Copy link
Owner

Gin5050 commented May 12, 2021

KK-Saito 様

実行できたということでよかったです。
ここまでに大変お手数をおかけして申し訳ございませんでした。

run('p2ch13.train_cls.LunaTrainingApp', f'--epochs={final_epochs}', '--balanced', '--augmented', 'final-cls')

 run('p2ch13.train_seg.LunaTrainingApp', f'--epochs={seg_epochs}', '--augmented', 'final-seg')

上記については本家のコードがそもそも誤っており、私たちがそれを見逃してしまったのが原因です。
したがって、日本語版でできないというよりは元のリポジトリでも実行できないです。
p2ch13/training.pyにはそもそもLunaTrainingAppというクラスは存在しない)

最後に、この度は貴重なご意見をありがとうございました。
今後ともよろしくお願いいたします。

@KK-Saito
Copy link
Author

一読者の質問にこれほど丁寧に御対応いただけるとは思っていませんでしたので,大変感謝しております。
ありがとうございました。

ここまできたらChapter 14のプログラムも実行させたいと思いますので,今後ともよろしく御願いいたします。
Chapter 14につきましては,別スレッドにしようかと思いますが,とりあえずp2ch13/dsets.pyをp2ch14/dsets.pyにコピーすれば動きますでしょうか?

@KK-Saito
Copy link
Author

subset0~subset3のデータを使って20エポックまで実行してみました。
実行中にディスクの残りが30GB程度になり,警告メッセージが出ましたので,Colab Proで実行する場合では,これ以上のデータは使えないようです。
subset0~subset3の中には
 240 training series, 2727 slices, 326 nodules
 27 validation series, 344 slices, 40 nodules
個のデータがありました。
subset0だけだと
 80 training series, 890 slices, 101 nodules
 9 validation series, 81 slices, 11 nodules
個のデータでしたので,ちょうど3倍というところです。
TensorBoardの出力結果を見ると,ほぼテキストp.480 図13.18と同じ結果が得られました。

ありがとうございました。

@Gin5050
Copy link
Owner

Gin5050 commented May 13, 2021

Chapter 14につきましては,別スレッドにしようかと思いますが,とりあえずp2ch13/dsets.pyをp2ch14/dsets.pyにコピーすれば動きますでしょうか?

Chapter 14についても修正したので最新のリポジトリに置き換えるか、KK-Saito 様がおっしゃるようにp2ch13の該当箇所のみをp2ch14/dsets.pyにコピーするでも大丈夫です

@VAN613
Copy link

VAN613 commented May 30, 2021

KK-Saitoさん
私はsubset0~subset9全てをダウンロードして実行しましたが、同様に「../p2ch13/dsets.pyの112行目で
 IndexError: list index out of range
となりました。なので、恐らく本当に何かが足りないような気がしています。大体やっている事は理解出来たので「まあいいか」と諦めていたのですが、無事、私の環境でも実行出来ました。質問して下さりどうもありがとうございました!
 ※対応して下さったGin5050さんもありがとうございます

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants