[MLOps] Docker API

현준·2025년 6월 29일

MLOps

목록 보기
3/3
post-thumbnail

도입

팀에서는 보통 ai 서비스 api에 대한 성능 프로파일링을 해야 할 때면 필요한 코드를 짜서 프로파일링을 하고 코드를 버렸다. 사실 cursor 같은 코딩 어시스턴트를 다들 쓰니까, 이런 리포팅 작업에는 온디맨드 스타일로 일회용 코드를 빨리 짜서 쓰고 버리는 것도 전략이라 생각한다.

근데, 이 성능 프로파일링 작업은 은근 빨리 되지가 않았다. 코드는 커서가 금방 작성해주지만 프로파일링 방식, 지표, 도구들이 다양하다 보니 하고자 하는 것에 적합한지 이해하고 판단하는 시간이 매번 더 소요됐던 것이다.

그래서 프로파일링은 일관된 도구를 쓰는게 낫겠다고 생각했고 재사용 가능한 프로파일링 패키지를 하나 만들어서 배포하기로 했다. 이름은 dockerbee로 지었다.

Docker API

프로메테우스 + 그라파나 조합을 모니터링과 성능 수집에 많이 활용하지만, 우리는 지속적인 모니터링을 하기 보다 온디맨드로 리소스 프로파일링을 하고 리포트를 뽑는 것이 목적이라 다른 옵션을 고려했다.

선택한 방식은 도커 컨테이너를 격리된 샌드박스로 보고 컨테이너 자체의 리소스를 수집하는 것이다. 도커 엔진의 HTTP API를 활용하면 바로 리소스를 수집할 수 있기 때문에 복잡도가 크게 없고, 어짜피 api를 컨테이너로 배포하기 때문에 프로파일링을 위한 추가적인 환경 세팅이 필요 없다는 것이 선택 이유다.

도커 API를 쓰기 위한 파이썬 클라이언트도 있다. docker라는 이름의 패키지다.

pip install docker

Docker Python Client

docker 파이썬 패키지는 주요 기능으로 요런 것들이 있다.

기능							설명
client.containers.run(...)	컨테이너 실행
client.images.build(...)	도커 이미지 빌드
client.containers.get(...)	특정 컨테이너 조회
client.networks.create(...)	네트워크 생성
client.volumes.create(...)	볼륨 생성
client.containers.list(...)	실행 중/전체 컨테이너 목록 가져오기

컨테이너 성능 수집 아래 처럼 할 수 있다.

import docker

client = docker.from_env()
container = client.containers.get("컨테이너_ID_or_name")

# 실시간 성능 정보 스트리밍 
stats = container.stats(stream=False)

stats 함수를 실행하면 성능 지표 샘플들이 들어온다. 예를 들면

stats = container.stats(stream=False)

cpu_total = stats['cpu_stats']['cpu_usage']['total_usage']
mem_usage = stats['memory_stats']['usage']
mem_limit = stats['memory_stats']['limit']

그래서, 수집 주기마다 stats 함수를 실행해서 배열로 저장한 후
수집이 끝나면 시계열 분석을 통해 리소스 최댓값, 최솟값, 평균값 등을 산출해볼 수 있다.

dockerbee

내가 만든 dockerbee 패키지는 크게 2가지 기능을 갖고 있다.

  1. 성능 수집
  2. 리포트 생성

성능 수집을 하기 전에 필요한 api 부하 요청은 시나리오마다 요청 방식이 매번 달라져야 하기 때문에, 기능을 분리했다. dockerbee v1.0.0에서 수집하는 지표는 29가지다.

cli 기반 툴이기 때문에 지표에 대한 description은 다음 커맨드로 확인한다.

dockerbee metrics

성능 수집은 다음 커맨드로 한다.

dockerbee run --container myapp --duration 5 --interval 1 --format html
  • duration: 수집 기간 (분)
  • interval: 수집 간격 (분)
  • format: 리포트 파일 형식 (json, html)

성능 수집이 끝나면 다음과 같은 리포트가 떨어진다.

결론

단일 컨테이너만 측정할 수 밖에 없는 단점이 있다.

profile
ML Engineer

0개의 댓글