Description
Describe the bug
When running as a non-root user within a container, sagemaker-inference fails to start the multi-model-server. This works when all packages are installed as root, and the entrypoint script is run as root. The entrypoint script starts the model server using:
sagemaker_inference.model_server.start_model_server(......)
To reproduce
- Install the libraries as in the Dockerfile snippet:
RUN ["useradd", "-ms", "/bin/bash", "-d", "/home/<user>", "<user>" ]
ENV CUSTOM_INFERENCE_DIR=/home/<user>/custom_inference
RUN mkdir -p ${CUSTOM_INFERENCE_DIR}
COPY code/* ${CUSTOM_INFERENCE_DIR}/
RUN chown -R <user>:root ${CUSTOM_INFERENCE_DIR}
RUN chmod -R +rwx ${CUSTOM_INFERENCE_DIR}
USER <user>
RUN pip install mxnet-model-server multi-model-server sagemaker-inference
RUN pip install retrying
NOTE: Running a CLI
Expected behavior
SageMaker MMS should start without any issues.
Screenshots or logs
File "/home/<user>/.local/lib/python3.6/site-packages/retrying.py", line 49, in wrapped_f
return Retrying(*dargs, **dkw).call(f, *args, **kw)
File "/home/<user>/.local/lib/python3.6/site-packages/retrying.py", line 206, in call
return attempt.get(self._wrap_exception)
File "/home/<user>/.local/lib/python3.6/site-packages/retrying.py", line 247, in get
six.reraise(self.value[0], self.value[1], self.value[2])
File "/usr/local/lib/python3.6/dist-packages/six.py", line 703, in reraise
raise value
File "/home/<user>/.local/lib/python3.6/site-packages/retrying.py", line 200, in call
attempt = Attempt(fn(*args, **kwargs), attempt_number, False)
File "/home/<user>/custom_inference/entrypoint.py", line 21, in _start_mms
model_server.start_model_server(handler_service=HANDLER_SERVICE)
File "/home/<user>/.local/lib/python3.6/site-packages/sagemaker_inference/model_server.py", line 77, in start_model_server
_create_model_server_config_file()
File "/home/<user>/.local/lib/python3.6/site-packages/sagemaker_inference/model_server.py", line 143, in _create_model_server_config_file
utils.write_file(MMS_CONFIG_FILE, configuration_properties)
File "/home/<user>/.local/lib/python3.6/site-packages/sagemaker_inference/utils.py", line 47, in write_file
with open(path, mode) as f:
PermissionError: [Errno 13] Permission denied: '/etc/sagemaker-mms.properties'
Checking on my development machine as well, it doesn't seem like non-root user has access to /etc.
Can this library be updated so as to run as non-root user?
System information
sagemaker-inference==1.5.2
-
Custom Docker image, ubuntu based.
-
framework name: tensorflow
-
framework version: 2.3.0
-
Python version: 3.6
-
processing unit type: CPU
-
Additional context
I worked-around this initial problem by granting write access to the /etc folder but it would be ideal if the configuration were stored in a user-writeable directory.