def _init_sagemaker_session_if_does_not_exist(self, instance_type): """Set ``self.sagemaker_session`` to be a ``LocalSession`` or ``Session`` if it is not already. The type of session object is determined by the instance type. """ if self.sagemaker_session: return if instance_type in ("local", "local_gpu"): self.sagemaker_session = local.LocalSession() else: self.sagemaker_session = session.Session()
def deploy(self, initial_instance_count, instance_type, accelerator_type=None, endpoint_name=None, tags=None): """Deploy this ``Model`` to an ``Endpoint`` and optionally return a ``Predictor``. Create a SageMaker ``Model`` and ``EndpointConfig``, and deploy an ``Endpoint`` from this ``Model``. If ``self.predictor_cls`` is not None, this method returns a the result of invoking ``self.predictor_cls`` on the created endpoint name. The name of the created model is accessible in the ``name`` field of this ``Model`` after deploy returns The name of the created endpoint is accessible in the ``endpoint_name`` field of this ``Model`` after deploy returns. Args: instance_type (str): The EC2 instance type to deploy this Model to. For example, 'ml.p2.xlarge'. initial_instance_count (int): The initial number of instances to run in the ``Endpoint`` created from this ``Model``. accelerator_type (str): Type of Elastic Inference accelerator to deploy this model for model loading and inference, for example, 'ml.eia1.medium'. If not specified, no Elastic Inference accelerator will be attached to the endpoint. For more information: https://docs.aws.amazon.com/sagemaker/latest/dg/ei.html endpoint_name (str): The name of the endpoint to create (default: None). If not specified, a unique endpoint name will be created. tags(List[dict[str, str]]): The list of tags to attach to this specific endpoint. Returns: callable[string, sagemaker.session.Session] or None: Invocation of ``self.predictor_cls`` on the created endpoint name, if ``self.predictor_cls`` is not None. Otherwise, return None. """ if not self.sagemaker_session: if instance_type in ('local', 'local_gpu'): self.sagemaker_session = local.LocalSession() else: self.sagemaker_session = session.Session() if self.role is None: raise ValueError("Role can not be null for deploying a model") compiled_model_suffix = '-'.join(instance_type.split('.')[:-1]) if self._is_compiled_model: self.name += compiled_model_suffix self._create_sagemaker_model(instance_type, accelerator_type) production_variant = sagemaker.production_variant(self.name, instance_type, initial_instance_count, accelerator_type=accelerator_type) if endpoint_name: self.endpoint_name = endpoint_name else: self.endpoint_name = self.name if self._is_compiled_model and not self.endpoint_name.endswith(compiled_model_suffix): self.endpoint_name += compiled_model_suffix self.sagemaker_session.endpoint_from_production_variants(self.endpoint_name, [production_variant], tags) if self.predictor_cls: return self.predictor_cls(self.endpoint_name, self.sagemaker_session)
def deploy( self, initial_instance_count, instance_type, accelerator_type=None, endpoint_name=None, update_endpoint=False, tags=None, kms_key=None, wait=True, ): """Deploy this ``Model`` to an ``Endpoint`` and optionally return a ``Predictor``. Create a SageMaker ``Model`` and ``EndpointConfig``, and deploy an ``Endpoint`` from this ``Model``. If ``self.predictor_cls`` is not None, this method returns a the result of invoking ``self.predictor_cls`` on the created endpoint name. The name of the created model is accessible in the ``name`` field of this ``Model`` after deploy returns The name of the created endpoint is accessible in the ``endpoint_name`` field of this ``Model`` after deploy returns. Args: instance_type (str): The EC2 instance type to deploy this Model to. For example, 'ml.p2.xlarge'. initial_instance_count (int): The initial number of instances to run in the ``Endpoint`` created from this ``Model``. accelerator_type (str): Type of Elastic Inference accelerator to deploy this model for model loading and inference, for example, 'ml.eia1.medium'. If not specified, no Elastic Inference accelerator will be attached to the endpoint. For more information: https://docs.aws.amazon.com/sagemaker/latest/dg/ei.html endpoint_name (str): The name of the endpoint to create (default: None). If not specified, a unique endpoint name will be created. update_endpoint (bool): Flag to update the model in an existing Amazon SageMaker endpoint. If True, this will deploy a new EndpointConfig to an already existing endpoint and delete resources corresponding to the previous EndpointConfig. If False, a new endpoint will be created. Default: False tags(List[dict[str, str]]): The list of tags to attach to this specific endpoint. kms_key (str): The ARN of the KMS key that is used to encrypt the data on the storage volume attached to the instance hosting the endpoint. wait (bool): Whether the call should wait until the deployment of this model completes (default: True). Returns: callable[string, sagemaker.session.Session] or None: Invocation of ``self.predictor_cls`` on the created endpoint name, if ``self.predictor_cls`` is not None. Otherwise, return None. """ if not self.sagemaker_session: if instance_type in ("local", "local_gpu"): self.sagemaker_session = local.LocalSession() else: self.sagemaker_session = session.Session() if self.role is None: raise ValueError("Role can not be null for deploying a model") compiled_model_suffix = "-".join(instance_type.split(".")[:-1]) if self._is_compiled_model: self.name += compiled_model_suffix self._create_sagemaker_model(instance_type, accelerator_type, tags) production_variant = sagemaker.production_variant( self.name, instance_type, initial_instance_count, accelerator_type=accelerator_type) if endpoint_name: self.endpoint_name = endpoint_name else: self.endpoint_name = self.name if self._is_compiled_model and not self.endpoint_name.endswith( compiled_model_suffix): self.endpoint_name += compiled_model_suffix if update_endpoint: endpoint_config_name = self.sagemaker_session.create_endpoint_config( name=self.name, model_name=self.name, initial_instance_count=initial_instance_count, instance_type=instance_type, accelerator_type=accelerator_type, tags=tags, kms_key=kms_key, ) self.sagemaker_session.update_endpoint(self.endpoint_name, endpoint_config_name) else: self.sagemaker_session.endpoint_from_production_variants( self.endpoint_name, [production_variant], tags, kms_key, wait) if self.predictor_cls: return self.predictor_cls(self.endpoint_name, self.sagemaker_session)
def deploy( self, initial_instance_count, instance_type, serializer=None, deserializer=None, accelerator_type=None, endpoint_name=None, tags=None, kms_key=None, wait=True, data_capture_config=None, ): """Deploy this ``Model`` to an ``Endpoint`` and optionally return a ``Predictor``. Create a SageMaker ``Model`` and ``EndpointConfig``, and deploy an ``Endpoint`` from this ``Model``. If self.model is not None, then the ``Endpoint`` will be deployed with parameters in self.model (like vpc_config, enable_network_isolation, etc). If self.model is None, then use the parameters in ``MultiDataModel`` constructor will be used. If ``self.predictor_cls`` is not None, this method returns a the result of invoking ``self.predictor_cls`` on the created endpoint name. The name of the created model is accessible in the ``name`` field of this ``Model`` after deploy returns The name of the created endpoint is accessible in the ``endpoint_name`` field of this ``Model`` after deploy returns. Args: initial_instance_count (int): The initial number of instances to run in the ``Endpoint`` created from this ``Model``. instance_type (str): The EC2 instance type to deploy this Model to. For example, 'ml.p2.xlarge', or 'local' for local mode. serializer (:class:`~sagemaker.serializers.BaseSerializer`): A serializer object, used to encode data for an inference endpoint (default: None). If ``serializer`` is not None, then ``serializer`` will override the default serializer. The default serializer is set by the ``predictor_cls``. deserializer (:class:`~sagemaker.deserializers.BaseDeserializer`): A deserializer object, used to decode data from an inference endpoint (default: None). If ``deserializer`` is not None, then ``deserializer`` will override the default deserializer. The default deserializer is set by the ``predictor_cls``. accelerator_type (str): Type of Elastic Inference accelerator to deploy this model for model loading and inference, for example, 'ml.eia1.medium'. If not specified, no Elastic Inference accelerator will be attached to the endpoint. For more information: https://docs.aws.amazon.com/sagemaker/latest/dg/ei.html endpoint_name (str): The name of the endpoint to create (default: None). If not specified, a unique endpoint name will be created. tags (List[dict[str, str]]): The list of tags to attach to this specific endpoint. kms_key (str): The ARN of the KMS key that is used to encrypt the data on the storage volume attached to the instance hosting the endpoint. wait (bool): Whether the call should wait until the deployment of this model completes (default: True). data_capture_config (sagemaker.model_monitor.DataCaptureConfig): Specifies configuration related to Endpoint data capture for use with Amazon SageMaker Model Monitoring. Default: None. Returns: callable[string, sagemaker.session.Session] or None: Invocation of ``self.predictor_cls`` on the created endpoint name, if ``self.predictor_cls`` is not None. Otherwise, return None. """ # Set model specific parameters if self.model: enable_network_isolation = self.model.enable_network_isolation() role = self.model.role vpc_config = self.model.vpc_config predictor_cls = self.model.predictor_cls else: enable_network_isolation = self.enable_network_isolation() role = self.role vpc_config = self.vpc_config predictor_cls = self.predictor_cls if role is None: raise ValueError("Role can not be null for deploying a model") if instance_type == "local" and not isinstance(self.sagemaker_session, local.LocalSession): self.sagemaker_session = local.LocalSession() container_def = self.prepare_container_def( instance_type, accelerator_type=accelerator_type) self.sagemaker_session.create_model( self.name, role, container_def, vpc_config=vpc_config, enable_network_isolation=enable_network_isolation, tags=tags, ) production_variant = sagemaker.production_variant( self.name, instance_type, initial_instance_count, accelerator_type=accelerator_type) if endpoint_name: self.endpoint_name = endpoint_name else: self.endpoint_name = self.name data_capture_config_dict = None if data_capture_config is not None: data_capture_config_dict = data_capture_config._to_request_dict() self.sagemaker_session.endpoint_from_production_variants( name=self.endpoint_name, production_variants=[production_variant], tags=tags, kms_key=kms_key, wait=wait, data_capture_config_dict=data_capture_config_dict, ) if predictor_cls: predictor = predictor_cls(self.endpoint_name, self.sagemaker_session) if serializer: predictor.serializer = serializer if deserializer: predictor.deserializer = deserializer return predictor return None