[小ネタ]Amazon SageMakerの”[Errno 36] File name too long”を解決した話

Amazon SageMakerで"[Errno 36] File name too long"が出た時のエラー解決をした方法です。意外と見落とすかもしれない箇所が原因でした。
2022.07.15

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

皆さんこんにちは。 hotoke_nekoです。

今回はAmazon SageMaker Studioでトレーニングジョブを走らせていた時に発生した"[Errno 36] File name too long"を解決した時のお話をします。

エラーの内容

問題が起きた箇所は次のようにlist型でstr型のファイルパスを複数渡しています。(ファイル名などはイメージです。)

AlgorithmError: Exception during training: [Errno 36] File name too long: "['/opt/ml/input/data/000000XXXXX1.jpg', '/opt/ml/input/data/000000XXXXX2.jpg', '/opt/ml/input/data/000000XXXXX3.jpg', ...]

しかし、各ファイルパスは以下サイトの要件に合致しているように見えました。

なぜエラーが起きたのでしょうか?

そして解決するにはどうしたら良いのでしょうか。

エラーを解決

エラーの原因

list型として渡していたのですが、list自体がstr型にキャストされているようでした。 (ここは使っているモデルによってデータの渡し方が異なるところなので注意が必要です。)

実際に、Google Colab上でlist型の中でstr型のファイルパスが複数あるような変数を用意して、list型変数それ自体をstr型にキャストできるか、キャスト後のprintメソッドで見た目はどうなっているか確認しました。 error 36 because cast list to str

画像の通り、printメソッド上では見た目が変わらないのですがlist型はstr型にキャストできる事を確認しました。

解決方法

今回のエラーは、list型で複数のstr型のファイルパスを格納したものが一つのstr型として認識され、エラー内容通りとても長いstr型が渡された事が原因でした。 そこでlist型で複数のファイルパスを渡していた箇所を、1つのファイルパスを格納したstr型変数を渡すよう修正する事で無事解決できました。

終わりに

今回はエラーで出ている内容そのままの理由が問題でしたが、エラー解決の時点では意外と見落とす可能性があるかもしれないと思い、筆を取りました。

見た目は問題がなくとも型が理由となって問題発生しているかもしれないので、皆さんも、もし同様のエラーが出た際にはよければ思い出していただければ幸いです。

本日はここまで。

それでは、また!