##この記事について
プログラミング初学者の私が初めてherokuにデプロイする際につまずいてしまったところを共有していけたらと思います。少しでも参考になれば幸いです。
##herokuでのデプロイ
今回私はFlaskを使ったアプリの開発を行いherokuへデプロイしようとしました。しかし最初から上手くいくはずもなくエラーがバンバン出てきました。
その中で一番出てきたエラーが
Compiled slug size: 504.7M is too large (max is 500M).
herokuにデプロイできる最大容量が500MB(無料版)に対して実際にデプロイしようとしたものが__504.7MBで容量オーバー__ですよというエラー。
あと4MBぐらいならrequirements.txtでモジュールを違うバージョンに書き換えて調整すれば500MBきるかなと思っていたんですが、デプロイしようとするたびに容量オーバーのエラーが出てしまっていました。
##原因
最初はモデルに読み込ませたデータ量が大きすぎたのかなと思いデータ量を少なくしてモデルを再構築しデプロイしてみましたが__結果は変わらず。__
ネットサーフィンしてたらどうやらtensorflow
が重たいことが判明しました。
##対策①
https://qiita.com/aquamarine/items/656d76425468ca47b5c9
まずはこのページを参考に2つ目のやり方でrequirements.txt
のtensorflowを1.15.3
に指定してherokuへデプロイすると290.8MBまで減り無事デプロイできました。
デプロイできたのは良かったんですけど肝心の__アプリが起動できなくなっていました。__
原因としてはもともとのモデルをtensorflow2.3.0
のもので構成していて今回requirements.txt
で変えたtensorflow1.15.3
のものと大きくバージョンが違ったからみたいです。
##対策②
もともとのモデルをtensorflowの1系
で構成しようと思いやってみましたが、モジュールのバージョンダウンがなかなかうまく行かず断念しました。
その後検索していたら同じようなところでつまずいている記事を発見。
https://stackoverflow.com/questions/61062303/deploy-python-app-to-heroku-slug-size-too-large
この記事の解答欄の中にこんな内容が。
Turns out the Tensorflow 2.0 module is very large (more than 500MB, the limit for Heroku) because of its GPU support. Since Heroku doesn't support GPU, it doesn't make sense to install the module with GPU support.
Solution: Simply replace tensorflow with tensorflow-cpu in your requirements. This worked for me, hope it works for you too!
どうやらtensorflowの2系
はGPUをサポートしているおかげで容量が大きくなっているみたいです。それでもってHerokuはGPUをサポートしていないらしく__GPUをサポートするモジュールは意味が無い__みたいです。
なのでrequirements.txt
のtensorflow
を__tensorflow-cpu
__に置き換えてデプロイすると無事解決できました。
tensorflow==2.3.0
↓↓↓↓↓
tensorflow-cpu==2.3.0
ちなみにデプロイ時の容量は
Done: 330.4M
でした。
だいぶ減ってたので結構びっくりしましたね。