def METHOD_NAME(self, local_dir, artifact_path=None):
    (bucket, dest_path) = self.parse_gcs_uri(self.artifact_uri)
    if artifact_path:
        dest_path = posixpath.join(dest_path, artifact_path)
    gcs_bucket = self._get_bucket(bucket)
    local_dir = os.path.abspath(local_dir)
    for root, _, filenames in os.walk(local_dir):
        upload_path = dest_path
        if root != local_dir:
            rel_path = os.path.relpath(root, local_dir)
            rel_path = relative_path_to_artifact_path(rel_path)
            upload_path = posixpath.join(dest_path, rel_path)
        for f in filenames:
            path = posixpath.join(upload_path, f)
            gcs_bucket.blob(path, chunk_size=self._GCS_UPLOAD_CHUNK_SIZE).upload_from_filename(
                os.path.join(root, f), timeout=self._GCS_DEFAULT_TIMEOUT
            )