2019년 11월 21일 목요일

TPU 사용 시 storage 관련 문제(HTTP 403, OutOfRangeError) 해결법

TPU에서 bert를 학습시키려고 했다.

VM 접속부터 여러 난관들이 있겠지만 ㅋㅋㅋ
Storage에 관련된 문제들이 두 개가 발생했다.


1. Checkpoint를 저장할 때 생기는 문제

Permission denied: Error executing an HTTP request: HTTP response code 403 with body '{
"error": {
"errors": [
{
"domain": "global",
"reason": "forbidden",
"message": "my_account_email does not have storage.objects.list access to object.~~."
}

2. OutOfRangeError (see above for traceback): End of sequence 에러


해결법
해결법은 내 tpu 서비스 계정에 storage에 대한 owner 권한을 주는 것이다.
Tpu 서비스 계정은 tpu를 누르면 맨 아래쪽에 표시된다.
형식은 service-{project 번호}@cloud-tpu.iam.gserviceaccount.com 이다.
프로젝트 번호는 Google cloud console 메인 페이지에 가면 project id 밑에 보인다.

Tpu 서비스 계정을 알았으면, 로컬 터미널에서 아래 명령을 실행하면 된다.
gsutil acl -r ch -u TPU계정:OWNER STORAGE_BUCKET_주소

* 참고 사항
READER WRITER 두개의 권한을 부여했더니 안 됐고, 꼭 OWNER 권한이 있어야 되는 것 같다.

-r 옵션은 recursive 옵션 같은데, 폴더 별로 따로 권한을 설정할 수도 있겠지만 최상위 폴더에 -r 옵션을 주어서 한 번에 전체 권한을 주는게 가장 속 편한 것 같다.
-r 옵션이 없으면 해당 폴더에만 권한이 생기고 하위 폴더에는 권한이 안 생기는 것 같다.
학습용 데이터와 학습된 모델을 다른 폴더에 저장하는 게 편할 것이기 때문에 폴더에 권한을 각각 주는 것보다 -r을 쓰는 게 좋을 듯하다.

댓글 없음:

댓글 쓰기