かなで技術日誌

プログラミングやエンジニアリング周りについて

主なアウトプットはScrapboxObsidianにまとめてます。

SageMaker Studioでexec format errorを解決する

結論

m1 macからのbuiildだったためアーキテクチャの差異が原因。 m1 macでのdocker build時は--platform=amd64を指定する。

詳細

SageMaker Studioのカスタムイメージを使うためにdocker build→docker pushまで実行してSageMaker Studioの立ち上げるも、カスタムイメージをを指定すると正常起動せず最終的にエラーになる。

CloudWatchで該当のappのログを見ても出力されているのはexec /opt/.sagemakerinternal/conda/kgw_variant: exec format error.というエラーのみでパッと見よくわからない。

最終的に辿り着いたのが以下のissueです。

github.com

m1 macでビルドした際にarm64のイメージが優先して取得されます。SageMaker StudioはEFSボリュームが今回だとKernelGatewayにマウントされる際にアーキテクチャが合わずにKernelの起動に失敗したという感じでしょうか。(推測が入っているので正しいかはわかりません)

qiita.com

なのでm1 macであればplatformオプションをamd64に指定することで解決するということです。

qiita.com

運用するときはGitHub ActionsやCircleCIなどを使うと思うのでアーキテクチャの違いに悩まされることは無いと思いますが、調査の時はローカルでの作業がメインになるので気をつけましょう。

余談ですが、調査しているときに同じDockerfileを使っているのにSageMaker Studioで起動するイメージと起動しないイメージがあり、更に謎が深まっていました。理由はローカルからbuildした時とGitHu Codespacesでbuildした時の違いでした。