#python #tensorflow #keras #google-cloud-platform #google-cloud-storage
#python #тензорный поток #keras #google-облачная платформа #google-облачное хранилище
Вопрос:
Я пытаюсь сохранить свои модели TF в корзину gcs model.save("bucket_path")
, но продолжаю получать следующую ошибку:
Traceback (most recent call last):
File "python-file.py", line 765, in <module>
model.save(bucket_save_path)
File "/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py", line 1979, in save
signatures, options)
File "/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/saving/save.py", line 134, in save_model
signatures, options)
File "/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/saving/saved_model/save.py", line 80, in save
save_lib.save(model, filepath, signatures, options)
File "/opt/conda/lib/python3.7/site-packages/tensorflow/python/saved_model/save.py", line 981, in save
utils_impl.get_or_create_variables_dir(export_dir)
File "/opt/conda/lib/python3.7/site-packages/tensorflow/python/saved_model/utils_impl.py", line 214, in get_or_create_variables_dir
file_io.recursive_create_dir(variables_dir)
File "/opt/conda/lib/python3.7/site-packages/tensorflow/python/lib/io/file_io.py", line 465, in recursive_create_dir
recursive_create_dir_v2(dirname)
File "/opt/conda/lib/python3.7/site-packages/tensorflow/python/lib/io/file_io.py", line 480, in recursive_create_dir_v2
_pywrap_file_io.RecursivelyCreateDir(compat.as_bytes(path))
tensorflow.python.framework.errors_impl.PermissionDeniedError: Error executing an HTTP request: HTTP response code 403 with body '{
"error": {
"code": 403,
"message": "Insufficient Permission",
"errors": [
{
"message": "Insufficient Permission",
"domain": "global",
"reason": "insufficientPermissions"
}
]
}
}
when initiating an upload to gs://bucket_name/mode_name/
Я убедился, что вошел в систему с gsutil auth login
помощью and export GOOGLE_APPLICATION_CREDENTIALS=<JSON_FILE_PATH>
. Поэтому я не уверен, почему я продолжаю получать эту ошибку разрешения.
Примечание: это выполняется на виртуальной машине GCP и сохраняется в корзине GCS.
Ответ №1:
Вероятно, это связано с разрешениями в корзине для учетной записи, которую вы используете для запуска кода. Учетная запись службы, под которой запущена виртуальная машина (скорее всего, учетная запись службы вычислений по умолчанию), должна иметь разрешения на запись в корзину, которую вы используете. Если вы используете детализированные списки управления доступом в своей корзине, эта команда предоставит разрешения на запись:
gsutil acl ch -u $PROJECT_NUMBER@compute-system.iam.gserviceaccount.com:WRITE gs://example-bucket
Если вы хотите иметь возможность использовать TF-код под своей учетной записью, используйте следующую команду, конечно, для вашей собственной учетной записи также требуются разрешения на запись в корзину.
gcloud auth application-default login
В основном это сводится к следующим вопросам:
- Под какой учетной записью вы запускаете код на виртуальной машине?
- Учетная запись службы (установите GOOGLE_APPLICATION_CREDENTIALS)
- Учетная запись пользователя (используйте логин приложения по умолчанию)
- Какие разрешения корзины вы используете?
- Детальный доступ (
gsutil iam ch
) - Единый доступ на уровне корзины (
gsutil acl ch
)
- Детальный доступ (