in docker/build_artifacts/sagemaker/serve.py [0:0]
def _setup_gunicorn(self):
python_path_content = []
python_path_option = ""
bucket = os.environ.get("SAGEMAKER_MULTI_MODEL_UNIVERSAL_BUCKET", None)
prefix = os.environ.get("SAGEMAKER_MULTI_MODEL_UNIVERSAL_PREFIX", None)
if not os.path.exists(CODE_DIR) and bucket and prefix:
self._download_scripts(bucket, prefix)
if self._enable_python_service:
lib_path_exists = os.path.exists(PYTHON_LIB_PATH)
requirements_exists = os.path.exists(REQUIREMENTS_PATH)
python_path_content = ["/opt/ml/model/code"]
python_path_option = "--pythonpath "
if lib_path_exists:
python_path_content.append(PYTHON_LIB_PATH)
if requirements_exists:
if lib_path_exists:
log.warning("loading modules in '{}', ignoring requirements.txt"
.format(PYTHON_LIB_PATH))
else:
log.info("installing packages from requirements.txt...")
pip_install_cmd = "pip3 install -r {}".format(REQUIREMENTS_PATH)
try:
subprocess.check_call(pip_install_cmd.split())
except subprocess.CalledProcessError:
log.error("failed to install required packages, exiting.")
self._stop()
raise ChildProcessError("failed to install required packages.")
gunicorn_command = (
"gunicorn -b unix:/tmp/gunicorn.sock -k {} --chdir /sagemaker "
"--workers {} --threads {} "
"{}{} -e TFS_GRPC_PORTS={} -e TFS_REST_PORTS={} "
"-e SAGEMAKER_MULTI_MODEL={} -e SAGEMAKER_SAFE_PORT_RANGE={} "
"-e SAGEMAKER_TFS_WAIT_TIME_SECONDS={} "
"python_service:app").format(self._gunicorn_worker_class,
self._gunicorn_workers, self._gunicorn_threads,
python_path_option, ",".join(python_path_content),
self._tfs_grpc_concat_ports, self._tfs_rest_concat_ports,
self._tfs_enable_multi_model_endpoint,
self._sagemaker_port_range,
self._tfs_wait_time_seconds)
log.info("gunicorn command: {}".format(gunicorn_command))
self._gunicorn_command = gunicorn_command