Вопрос или проблема
Мы используем код на Python для запуска некоторых пользовательских заданий, моя проблема заключается в том, что даже используя сервисный аккаунт “[email protected]“, для запуска задания, внутри него используется аккаунт “”service-xxxxxxxxxxxxxxxx-compute@gcp-sa-aiplataform-cc.iam.gserviceaccount.com”, что ломает мой код, потому что этот второй не имеет всех разрешений BigQuery, возможно ли запустить задание, используя “[email protected]“? Я пробовал это несколькими способами, но ни один из них не сработал.
def create_custom_job(
project: str,
display_name: str,
container_image_uri: str,
args: list,
machine: str="n1-standard-4",
location: str = "northamerica-northeast1",
api_endpoint: str = "northamerica-northeast1-aiplatform.googleapis.com"
):
client_options = {"api_endpoint": api_endpoint}
client = aiplatform.gapic.JobServiceClient(client_options=client_options)
custom_job = {
"display_name": display_name,
"job_spec": {
"worker_pool_specs": [
{
"machine_spec": {
"machine_type": machine,
},
"replica_count": 1,
"container_spec": {
"image_uri": container_image_uri,
"command": [],
"args": args,
},
}
]
},
}
parent = f"projects/{project}/locations/{location}"
response = client.create_custom_job(parent=parent, custom_job=custom_job)
return response
temp=create_custom_job(
display_name="yyyyyyyyyyyyya",
container_image_uri="container_image_path",
args=["--a=c"],
project="project_name",
machine="n1-highmem-16"
)
Вы решили проблему?
У меня такая же проблема, я пытаюсь запустить пользовательское задание в Vertex AI с конкретным сервисным аккаунтом. Я сделал это с помощью команды Gcloud, но не с помощью Python.
Ответ или решение
Чтобы указать учетную запись службы при запуске пользовательской работы в Google Cloud Vertex AI с использованием Python, необходимо правильно конфигурировать настройки рабочего процесса. В вашем сценарии вы запускаете кастомную задачу, но задача использует другую учетную запись, что может вызвать ошибки, связанные с правами доступа, например, в BigQuery. Ниже приводится руководство по настройке учетной записи службы в кастомном задании.
Шаг 1: Настройка IAM и учетных записей службы
Перед тем как запустить задание, необходимо удостовериться, что ваша основная учетная запись службы имеет необходимые разрешения. Учетная запись, которая по умолчанию используется в вашем кастомном задании (например, service-xxxxxxxxxxxxxxxx-compute@gcp-sa-aiplataform-cc.iam.gserviceaccount.com
), может не обладать всеми необходимыми правами. Вам нужно предоставить дополнительные разрешения, такие как доступ к BigQuery.
-
Создание и настройка учетной записи службы:
- Убедитесь, что у вас есть учетная запись службы, которая будет выполнять ваш код. Например, [ваша_учетная_запись_службы] должна иметь доступ к API Google Cloud, включая BigQuery.
- Назначьте этой учетной записи необходимые роли (например,
BigQuery Admin
,AI Platform Admin
).
-
Проверка прав доступа:
- Проверьте, правильно ли настроены разрешения для вашей учетной записи службы с помощью Google Cloud Console:
- IAM > Учетные записи служб > [ваша_учетная_запись_службы] > Проверить роли.
- Проверьте, правильно ли настроены разрешения для вашей учетной записи службы с помощью Google Cloud Console:
Шаг 2: Указание учетной записи службы в Python-коде
Теперь вам необходимо изменить код так, чтобы он использовал заданную вами учетную запись службы. Используйте параметр service_account
при создании кастомной работы.
Пример:
def create_custom_job(
project: str,
display_name: str,
container_image_uri: str,
args: list,
service_account: str, # Новый параметр
machine: str="n1-standard-4",
location: str = "northamerica-northeast1",
api_endpoint: str = "northamerica-northeast1-aiplatform.googleapis.com"
):
client_options = {"api_endpoint": api_endpoint}
client = aiplatform.gapic.JobServiceClient(client_options=client_options)
custom_job = {
"display_name": display_name,
"job_spec": {
"worker_pool_specs": [
{
"machine_spec": {
"machine_type": machine,
},
"replica_count": 1,
"service_account": service_account, # Указание учетной записи службы
"container_spec": {
"image_uri": container_image_uri,
"command": [],
"args": args,
},
}
]
},
}
parent = f"projects/{project}/locations/{location}"
response = client.create_custom_job(parent=parent, custom_job=custom_job)
return response
# Пример использования функции
temp = create_custom_job(
display_name="yyyyyyyyyyyyya",
container_image_uri="container_image_path",
args=["--a=c"],
project="project_name",
machine="n1-highmem-16",
service_account="[ваша_учетная_запись_службы]" # Добавлено здесь
)
Шаг 3: Отладка ошибок доступа
Если после реализации изменений у вас все еще возникают проблемы, убедитесь, что:
- Учетная запись службы имеет разрешения на доступ к ресурсам, необходимым для задачи.
- Попробуйте запустить соответствующие gcloud команды для диагностики проблем с разрешениями.
- Проверьте логи ошибок в Google Cloud Console для получения более подробной информации о проблемах с правами доступа.
Заключение
Таким образом, для успешного запуска кастомные задания с заданной учетной записью службы, необходимо правильно настроить IAM, передать сервисный аккаунт в вашем коде и убедиться в наличии необходимых прав для выполнения всех запрашиваемых операций. Следуя приведенным шагам, вы сможете избежать проблем с доступом и конфиденциальностью в ваших проектах на Google Cloud.