mlflow를 사용하다 아래와 같은 에러가 발생했다.
log-parameter failed with exception HTTPConnectionPool(host='localhost', port=5000): Max retries exceeds with url: api/2.0/mlflow/runs/log-parameter (Caused by ResponseError('too many 500 error responses'))
에러가 발생한 시점은 mlflow를 로컬 파일 시스템에서 사용하다
mlflow server와 mysql server를 연동 시켜 사용하려고 시스템을 구축한 직후 이다.
시스템 구축에 사용된 mlflow 와 mysql 버전은 아래와 같다.
mysql server version: 8.0.28
mlflow version: 1.24
Error
기존 환경:
mlflow를 아래 Fig 2와 같이 로컬 환경에서 사용
문제 발생 환경
총 3개의 docker container(mysql_server, mlflow_server, model_train_server)를 docker-compose로 실행하여
mysql server를 mlflow server의 backend-store-uri 로 사용 하는 아래 그림 Fig 3. 과 같이 시스템을 구축하는 과정에서 발생
원인 & 해결
위 에러는 mlflow.log_param() 이 실행되는 도중에 발생했다. 딥러닝 모델을 학습할 때 사용 된 하이퍼 파라미터와 모델 configuration 을 기록 하기 위해 log_param을 사용 하고 있었다.
문제는 모델 configuration 을 표현 하는 dictionary 로 key가 꽤 많고 value도 꽤 많은,
즉 사이즈가 큰 dict를 serialize해tj log_param으로 기록 하려고 시도하는 과정에서 발생한 것으로 보인다.
나의 경우 해결 방법이 간단했는데 log_param으로 기록 하던 값들 중 dictionary로 그룹화 되어 사이즈가 큰편에 속하는 것 값들은 mlflow.log_dict 으로 artifact로 저장하고 string이나 int, float등의 단일 값들을 log_param으로 기록 하는 것으로 해결했다.
다만, 기존 환경인 mlflow on localhost에서는 문제가 발생하지 않은 것으로 보아 log_param() 메서드가 serialize 한 값을 urllib를 이용해 보낼수 있는 크기에 상하선이 있는것 같은데 이상한선이 어떤 값인지는 확인해 보지 않았다.
'Common' 카테고리의 다른 글
[git error] fatal: unable to fork (0) | 2022.06.19 |
---|---|
[mlflow & mysql] restore backend store (0) | 2022.05.24 |
ubuntu swap memory 설정 (0) | 2022.05.12 |
[mlflow ] mlflow 소개와 사용 이유 (1/3) (0) | 2022.03.18 |
[docker] docker root dir 변경 (0) | 2022.02.08 |