我训练了一个使用FastAPI生产的图像分类模型,我想通过Heroku部署它。
我的模型很大(859 MB),因此我通过GitHub LFS将其添加到我的repo。然而,Heroku默认不支持githuubs LFS,即使它支持,我的模型也基本上会使slug大小饱和,限制在500MB。
我想到的解决方案是在应用程序开始时请求模型,如下所示,然后用于对图像进行分类:
urll = 'https://github.com/nainiayoub/paintings-artist-classifier/releases/download/v1.0.0/artists_classifier.h5'
filename_model = urll.split('/')[-1]
urllib.request.urlretrieve(urll, filename_model)
model_file = filename_model
我的API已经成功部署,但是它返回
503 Undocumented Error: Service Unavailable.
这可能意味着我的模型没有加载。
在这一点上,我被卡住了,我不知道如何进行,你有任何想法或替代解决方案来部署我的大型模型吗?我发现的解决方案是通过将其转换为如下所示的tflite来减小模型大小,然后使用它对输入图像进行分类:
tflite_model_name = 'model_reduced'
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.OPTIMIZE_FOR_SIZE]
tflite_model = converter.convert()
open(tflite_model_name + '.tflite', 'wb').write(tflite_model)
模型尺寸减小到72MB,这增加了依赖项的大小,而没有使Huroku的段塞尺寸饱和,因此api部署成功。