日々精進

新しく学んだことを書き留めていきます

YOLOXの学習を実行すると「RuntimeError: falseINTERNAL ASSERT FAILED at "../aten/src/ATen/MapAllocator.cpp":300, please report a bug to PyTorch. unable to write to file </torch_4492_0>」エラー

原因はshared memoryの容量が足りないこと。学習環境のdocker composeに以下を追加すると直った。

shm_size: '16gb'

参考:

Unable to write to file </torch_18692_1954506624> - #6 by gaily_sun - PyTorch Forums

SageMaker PipelinesのStepのOutputに「ClientError: Cannot access S3 key.」と書かれていてもS3にアクセス出来ないことが原因でないことが多い

Pipeline実行がエラーになり、エラーになったStepのOutputを見行くと、以下のメッセージが表示されていた。

This step failed. For more information, view the logs.
ClientError: Cannot access S3 key.

が、結論としてはS3がエラーの原因ではなかった。上記のメッセージは恐らくOutput欄に表示する情報をS3に取りに行って、何も無かったのでエラーになりましたという意味だと思われる。紛らわしすぎる。

本当のエラーの原因はProcessingStepの失敗であれば

SageMaker>処理中>ジョブの処理

から失敗したジョブの詳細を見ると「失敗の理由」として出ている。

SageMaker ProjectのPipelinesタブに自分で作ったPipelineを表示させる

Pipelineのタグを以下のように設定すれば表示される。タグはsagemaker sdkのPipelineクラスのcreate, upsertメソッドの引数で渡せる。

sagemaker:project-name: , sagemaker:project-id:

projectとpipelineの紐付け方がわからなかったが、tagで紐付けているのか。。この情報もっとわかりやすくドキュメントに書いておいて欲しいなぁ。

「pycocotools/_mask.pyx ValueError: numpy.ndarray size changed, may indicate binary incompatibility.」エラー

原因はnumpyのバージョンが古いことで、1.20.1以上にすれば直るっぽいが TensorFlowが1.19.5に依存しているのでnumpyのバージョンを上げられない・・

stackoverflow.com

しょうがないのでpycocotoolsを使わずアノテーションファイルのparseを独自実装することにした。

SageMakerで学習をしている時のTensorBoardを表示する

Estimatorのinitにtensorboard_output_configという引数があるので、これを設定するとtensorboardのログをS3にアップロードしてくれそうだけど、してくれなかった。。 以下で同じ問題で困っている人がいるけど解決してないっぽい。

stackoverflow.com

しょうがないのでtensorboard callbackのlog_dirにS3のパスを指定してアップロードした。詳細は以下参照。

dev.classmethod.jp

SageMaker Studio上でTensorBoardを表示する手順は以下。

docs.aws.amazon.com