일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 공분산
- Retry
- top_k
- requests
- spark udf
- API Gateway
- 상관관계
- login crawling
- subdag
- hadoop
- Airflow
- grad-cam
- gather_nd
- TensorFlow
- API
- session 유지
- UDF
- GenericGBQException
- chatGPT
- BigQuery
- integrated gradient
- GCP
- correlation
- XAI
- Counterfactual Explanations
- flask
- airflow subdag
- 유튜브 API
- tensorflow text
- youtube data
- Today
- Total
데이터과학 삼학년
GCP AI-platform Stream Logs error 본문
GCP의 서비스 중 ai-platform(구 CMLE) 기능을 사용할 때 나타나는 에러에 대해 언급하려 한다.
stream logs 에서 나는 에러가 있다. 바로 아래 그림이다.
gcp 서버쪽으로 logs 관련 api를 호출하는 과정에서 나는 서버 에러로 보인다.
이러한 에러는 실제로 gcp의 ai-platform에서 학습과 예측을 시키는데 전혀 문제가 없지만
파이프 라인으로 구성한 프로젝트 잡의 경우에는 매우 치명적이다.
예를 들어
파이프라인으로 데이터 전처리 - 학습 - 예측 - 결과적재 의 단계를 실행 시킬때
학습의 단계가 완료 된후 예측으로 넘어가야하기 때문에 학습이 완료된 지 여부를 알아야한다.
이것을 위해 사용하는 것이 stream-logs 라는 옵션이다.
이 옵션을 넣게 되면 학습이 다 될때까지 stream logs가 실행되면서 학습의 완료 후에 다음단계인 예측단계로 넘어갈 수 있다.
gcloud ai-platform jobs submit training train_jobs1 \
--project=${PROJECT_ID} \
--job-dir gs:// --- \
--module-name trainer.task \
--package-path model/trainer \
--region us-central1 \
--python-version 3.5 \
--runtime-version 1.14 \
--stream-logs \
-- \
그러나 gcp 내부에서 stream-logs 관련 에러가 나게 되면 파이프라인 자체가 종료되기 때문에 학습은 되더라도 다음 단계인 예측-결과적재 부분의 stage가 실행되지 못한다.
예측부분에는 stream-logs라는 옵션이 없기 때문에 jobs stream-logs라는 명령어로 예측을 기다리기도 하는데
이 역시 gcp내의 서버에러가 나면 무용지물이다.
gcloud ai-platform jobs stream-logs JOB
[--allow-multiline-logs]
[--polling-interval=POLLING_INTERVAL; default=60]
[--task-name=TASK_NAME]
[GCLOUD_WIDE_FLAG …]
이런 문제를 해결하기 위한 방법은... stream-logs 옵션을 지우고
gcp에 계속해서 requests로 완료가 되었는지 찔러주며 학습 또는 예측이 완료되었는지 확인한 후 다음 단계(코드)를 실행시키는 방법이다.
import os
import argparse
import time
from google.oauth2.service_account import Credentials
from googleapiclient import discovery
from googleapiclient import errors
parser = argparse.ArgumentParser(description='')
parser.add_argument("--project_id", required=True)
parser.add_argument("--job_id", required=True)
args = parser.parse_args()
projectName = args.project_id
jobName = args.job_id
projectId = 'projects/{}'.format(projectName)
jobId = '{}/jobs/{}'.format(projectId, jobName)
print("job_name : ", jobName)
print("job_id :", jobId)
service_account_credentials_path = '{}/credentials/credentials.json'.format(os.getenv("HOME"))
credentials = Credentials.from_service_account_file(service_account_credentials_path)
ml = discovery.build('ml','v1', credentials=credentials)
request = ml.projects().jobs().get(name=str(jobId))
response = None
time.sleep(60)
while True:
try:
response = request.execute()
print('response:',response)
except errors.HttpError:
pass
if response == None:
print('[ERROR] Response is None.')
break
state = response['state']
if state == 'SUCCEEDED':
print('[SUCCESS] Job finished successfully.')
break
elif state == 'FAILED' or state == 'CANCELLED' or state == 'STATE_UNSPECIFIED':
print('[ERROR] Job finished unsuccessfully.')
print('Job state: {}'.format(response['state']))
break
time.sleep(30)
다른 방법은 학습과 예측에 소요되는 시간을 예상하여 sleep을 걸어주는 방법이 있을 수 있다.(그러나 이것은 매우 비추...)
GCP.....해결할 수 없는 에러들은...쓰는 사람이 잘 빠져나갈 수 있게 써야하는 것인가...
사람들이 많이 쓰는 Cloud 서비스는 왜 쓰는지 그 이유가 있는 것이라는 것을...
슬슬 입문해봐야겠다. 사람들이 많이 쓰는 Cloud 서비스
출처 : https://cloud.google.com/ml-engine/docs/python-client-library?hl=ko
'GCP' 카테고리의 다른 글
AutoML Natural Language 소개 (0) | 2020.05.22 |
---|---|
Dataflow SQL (0) | 2020.04.06 |
Bigquery Table_Suffix 관련 error(적재되는 data type이 꼬였을 때) (0) | 2020.01.30 |
Data_analysis on GCP (0) | 2020.01.17 |
Data engineering on GCP (0) | 2020.01.17 |