def retrieve_artifacts(self, compose_data, output_data_config, job_name):
        """Get the model artifacts from all the container nodes.

        Used after training completes to gather the data from all the individual containers. As the
        official SageMaker Training Service, it will override duplicate files if multiple containers have
        the same file names.

        Args:
            compose_data(dict): Docker-Compose configuration in dictionary format.

        Returns: Local path to the collected model artifacts.

        """
        # We need a directory to store the artfiacts from all the nodes
        # and another one to contained the compressed final artifacts
        artifacts = os.path.join(self.container_root, 'artifacts')
        compressed_artifacts = os.path.join(self.container_root, 'compressed_artifacts')
        os.mkdir(artifacts)

        model_artifacts = os.path.join(artifacts, 'model')
        output_artifacts = os.path.join(artifacts, 'output')

        artifact_dirs = [model_artifacts, output_artifacts, compressed_artifacts]
        for d in artifact_dirs:
            os.mkdir(d)

        # Gather the artifacts from all nodes into artifacts/model and artifacts/output
        for host in self.hosts:
            volumes = compose_data['services'][str(host)]['volumes']
            for volume in volumes:
                host_dir, container_dir = volume.split(':')
                if container_dir == '/opt/ml/model':
                    sagemaker.local.utils.recursive_copy(host_dir, model_artifacts)
                elif container_dir == '/opt/ml/output':
                    sagemaker.local.utils.recursive_copy(host_dir, output_artifacts)

        # Tar Artifacts -> model.tar.gz and output.tar.gz
        model_files = [os.path.join(model_artifacts, name) for name in os.listdir(model_artifacts)]
        output_files = [os.path.join(output_artifacts, name) for name in os.listdir(output_artifacts)]
        sagemaker.utils.create_tar_file(model_files, os.path.join(compressed_artifacts, 'model.tar.gz'))
        sagemaker.utils.create_tar_file(output_files, os.path.join(compressed_artifacts, 'output.tar.gz'))

        if output_data_config['S3OutputPath'] == '':
            output_data = 'file://%s' % compressed_artifacts
        else:
            # Now we just need to move the compressed artifacts to wherever they are required
            output_data = sagemaker.local.utils.move_to_destination(
                compressed_artifacts,
                output_data_config['S3OutputPath'],
                job_name,
                self.sagemaker_session)

        _delete_tree(model_artifacts)
        _delete_tree(output_artifacts)

        return os.path.join(output_data, 'model.tar.gz')
Get the model artifacts from all the container nodes.

        Used after training completes to gather the data from all the individual containers. As the
        official SageMaker Training Service, it will override duplicate files if multiple containers have
        the same file names.

        Args:
            compose_data(dict): Docker-Compose configuration in dictionary format.

        Returns: Local path to the collected model artifacts.