我用MASK-RCNN训练了一个图像分割模型,我现在的目标是使用AWS Lambda进行推断,为此我正在修改Deploy multiple machine learning models for inference on AWS Lambda and Amazon EFS,我的项目树是:
.
├── Dockerfile
├── __init__.py
├── app.py
├── requirements.txt
└── maskrcnn
├── config.py
├── __init__.py
├── m_rcnn.py
├── visualize.py
├── mask_rcnn_coco.h5
├── mask_rcnn_object_0005.h5
└── model.py
因此,我决定将我的模型加载到maskrcnn
目录中,而不是try 将我的模型加载到EFS挂载点,我使用COPY maskrcnn/ ./maskrcnn
在Dockerfile中添加了一条COPY语句.
当我在本地调用我的代码时,它可以完美地工作.然而,在部署项目后,它不再起作用.当我try 通过网关API的endint进行推理时,我得到了以下响应:
[ERROR] OSError: [Errno 38] Function not implemented
Traceback (most recent call last):
File "/var/task/app.py", line 32, in lambda_handler
r = test_model.detect([image])[0]
File "/var/task/maskrcnn/model.py", line 2545, in detect
self.keras_model.predict([molded_images, image_metas, anchors], verbose=0)
File "/var/lang/lib/python3.8/site-packages/tensorflow/python/keras/engine/training_v1.py", line 988, in predict
return func.predict(
File "/var/lang/lib/python3.8/site-packages/tensorflow/python/keras/engine/training_arrays_v1.py", line 703, in predict
return predict_loop(
File "/var/lang/lib/python3.8/site-packages/tensorflow/python/keras/engine/training_arrays_v1.py", line 386, in model_iteration
aggregator.create(batch_outs)
File "/var/lang/lib/python3.8/site-packages/tensorflow/python/keras/engine/training_utils_v1.py", line 446, in create
SliceAggregator(self.num_samples, self.batch_size)))
File "/var/lang/lib/python3.8/site-packages/tensorflow/python/keras/engine/training_utils_v1.py", line 355, in __init__
self._pool = get_copy_pool()
File "/var/lang/lib/python3.8/site-packages/tensorflow/python/keras/engine/training_utils_v1.py", line 323, in get_copy_pool
_COPY_POOL = multiprocessing.pool.ThreadPool(_COPY_THREADS)
File "/var/lang/lib/python3.8/multiprocessing/pool.py", line 925, in __init__
Pool.__init__(self, processes, initializer, initargs)
File "/var/lang/lib/python3.8/multiprocessing/pool.py", line 196, in __init__
self._change_notifier = self._ctx.SimpleQueue()
File "/var/lang/lib/python3.8/multiprocessing/context.py", line 113, in SimpleQueue
return SimpleQueue(ctx=self.get_context())
File "/var/lang/lib/python3.8/multiprocessing/queues.py", line 336, in __init__
self._rlock = ctx.Lock()
File "/var/lang/lib/python3.8/multiprocessing/context.py", line 68, in Lock
return Lock(ctx=self.get_context())
File "/var/lang/lib/python3.8/multiprocessing/synchronize.py", line 162, in __init__
SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx)
File "/var/lang/lib/python3.8/multiprocessing/synchronize.py", line 57, in __init__
sl = self._semlock = _multiprocessing.SemLock(