AI 모델 개발: 성능 분석
ㅁ 성능 분석
ㅇ 정의:
AI 모델 개발 과정에서 코드 실행 효율, 자원 사용량, 처리 속도 등을 측정하고 개선 포인트를 찾는 활동.
ㅇ 특징:
– CPU/GPU 사용률, 메모리 소비, 실행 시간 등을 계측
– 병목 구간 식별 및 최적화 전략 수립 가능
– 다양한 도구와 라이브러리 활용 가능
ㅇ 적합한 경우:
– 모델 훈련 시간이 길어지는 경우
– 배포 환경에서 응답 지연이 발생하는 경우
ㅇ 시험 함정:
– 단순 로그 출력과 성능 분석의 차이를 혼동
– 프로파일링과 디버깅을 동일시하는 오류
ㅇ 시험 대비 “패턴 보기” 예시:
O: “GPU 메모리 사용량을 측정하여 병목 구간을 찾는 것은 성능 분석의 일환이다.”
X: “성능 분석은 코드의 버그를 찾는 과정이다.”
================================
1. Python 테스트 도구
ㅇ 정의:
Python 환경에서 코드의 동작과 성능을 검증하기 위해 사용하는 테스트 프레임워크 및 라이브러리.
ㅇ 특징:
– unittest, pytest 등 다양한 프레임워크 존재
– 단위 테스트, 통합 테스트, 성능 테스트 가능
– 자동화된 테스트 실행 및 리포트 생성 지원
ㅇ 적합한 경우:
– 모델 코드 변경 시 기능 이상 여부를 빠르게 확인해야 하는 경우
– 지속적 통합(CI) 환경에서 자동 테스트 필요 시
ㅇ 시험 함정:
– 단위 테스트와 성능 테스트를 혼동
– Python 테스트 도구를 디버거로 오해
ㅇ 시험 대비 “패턴 보기” 예시:
O: “pytest는 Python 코드의 단위 테스트에 활용될 수 있다.”
X: “unittest는 모델의 GPU 사용률을 실시간 모니터링하는 도구이다.”
================================
2. PyTorch 프로파일링
ㅇ 정의:
PyTorch에서 모델 실행 시 연산별 실행 시간, 메모리 사용량 등을 측정하여 성능 병목을 찾는 기능.
ㅇ 특징:
– torch.profiler API 제공
– CPU/GPU별 연산 시간 분석 가능
– TensorBoard와 연계 가능
ㅇ 적합한 경우:
– 학습 속도가 느린 원인을 파악할 때
– 특정 레이어에서 과도한 연산이 발생하는지 확인할 때
ㅇ 시험 함정:
– 프로파일링 결과를 단순 평균으로만 해석하는 오류
– PyTorch 프로파일링과 로깅을 혼동
ㅇ 시험 대비 “패턴 보기” 예시:
O: “torch.profiler를 사용하면 GPU별 연산 시간을 측정할 수 있다.”
X: “PyTorch 프로파일링은 모델 정확도를 향상시키는 하이퍼파라미터 튜닝 기법이다.”
================================
3. 에러 분해
ㅇ 정의:
모델 성능 저하 원인을 오차 항목별로 분리하여 분석하는 기법.
ㅇ 특징:
– 예측 오차를 데이터 품질, 모델 구조, 학습 과정 등으로 구분
– 정량적 분석을 통해 개선 우선순위 설정
ㅇ 적합한 경우:
– 모델이 특정 클래스에서만 성능이 낮을 때
– 오차 원인을 체계적으로 규명해야 할 때
ㅇ 시험 함정:
– 에러 분해를 단순 디버깅 과정으로 오해
– 오차 유형 식별 없이 무조건 데이터 양을 늘리는 접근
ㅇ 시험 대비 “패턴 보기” 예시:
O: “에러 분해를 통해 데이터 라벨 오류로 인한 성능 저하를 발견할 수 있다.”
X: “에러 분해는 모델 파라미터 수를 줄이는 과정이다.”
================================
4. 성능 병목 분석
ㅇ 정의:
시스템이나 모델 실행 과정에서 전체 성능을 제한하는 구간(병목)을 찾아내는 분석 기법.
ㅇ 특징:
– CPU, GPU, I/O, 네트워크 등 다양한 자원에 대한 병목 가능성 분석
– 병목 제거 시 전체 성능 향상 가능
ㅇ 적합한 경우:
– 모델 추론 속도가 기대보다 느릴 때
– 데이터 로딩 과정이 전체 처리 속도를 제한할 때
ㅇ 시험 함정:
– 병목 구간을 단일 원인으로 단정
– 병목 분석 없이 무조건 하드웨어 업그레이드 시도
ㅇ 시험 대비 “패턴 보기” 예시:
O: “데이터 로딩 속도가 느려서 전체 학습 시간이 지연되는 것은 성능 병목의 예이다.”
X: “성능 병목 분석은 모델의 정확도를 높이기 위한 기법이다.”
ㅁ 추가 학습 내용
학습 정리
성능 분석
– 속도 측정뿐 아니라 메모리 사용 패턴, 입출력 대기 시간, 병렬 처리 효율까지 종합적으로 고려해야 함
– Python 성능 테스트 시 벤치마크 코드 작성법 숙지
– pytest-benchmark 플러그인 설치 및 사용법 이해
PyTorch 프로파일링
– trace_handler를 활용한 커스텀 로깅 방법
– TensorBoard 프로파일러 플러그인 사용법
– step별 프로파일링 기법
에러 분해
– bias-variance decomposition 개념 및 계산 방법
– confusion matrix 기반 클래스별 오류 분석 절차
– 데이터셋 분포 불균형 탐지 기법
성능 병목 분석
– Amdahl’s Law의 정의와 공식, 병렬화 한계 분석
– 파이프라인 병목 이론 이해
– Async I/O와 멀티스레딩, 멀티프로세싱의 차이와 장단점 비교
시험 대비 체크리스트
1. 메모리 사용 패턴, I/O 대기 시간, 병렬 처리 효율 측정 방법을 설명할 수 있는가
2. Python에서 벤치마크 코드를 작성하고 pytest-benchmark로 실행할 수 있는가
3. PyTorch trace_handler로 커스텀 로깅을 구현할 수 있는가
4. TensorBoard 프로파일러 플러그인을 설정하고 결과를 해석할 수 있는가
5. step별 프로파일링을 수행하고 분석할 수 있는가
6. bias-variance decomposition을 정의하고 예시를 들어 설명할 수 있는가
7. confusion matrix로 클래스별 오류를 분석할 수 있는가
8. 데이터셋 불균형을 탐지하는 지표와 방법을 제시할 수 있는가
9. Amdahl’s Law를 적용하여 병렬화의 한계를 계산할 수 있는가
10. 파이프라인 병목 이론을 설명하고 사례를 제시할 수 있는가
11. Async I/O, 멀티스레딩, 멀티프로세싱의 차이점과 활용 상황을 설명할 수 있는가