이 섹션에서는 학습 파이프라인을 자세히 설명합니다.
입력 파이프라인 최적화
요약: 입력 바인딩 파이프라인의 원인과 개입은 작업에 크게 의존합니다. 프로파일러를 사용하고 일반적인 문제를 찾아보세요.
다음 바인딩 중 하나와 같은 적절한 프로파일러를 사용하여 입력 제약적인 파이프라인을 진단하세요.
- JAX용 Perfetto
- TensorFlow용 TensorFlow 프로파일러
구체적인 원인과 개입은 작업에 따라 크게 달라집니다. 더 광범위한 엔지니어링 고려사항 (예: 디스크 사용 공간 최소화)은 입력 파이프라인 성능을 저하시킬 수 있습니다.
입력 제약조건 파이프라인의 일반적인 원인은 다음과 같습니다.
- 데이터가 학습 프로세스와 같은 위치에 배치되지 않아 I/O 지연 시간이 발생합니다. 예를 들어 네트워크를 통해 학습 데이터를 읽으면 I/O 지연 시간이 발생할 수 있습니다.
- 고가의 온라인 데이터 사전 처리 오프라인 상태에서 사전 처리하고 결과를 저장하는 것이 좋습니다.
- 데이터 파이프라인 미리 가져오기를 방해하는 의도하지 않은 동기화 장벽. 예를 들어 CommonLoopUtils의 기기와 호스트 간에 측정항목을 동기화할 때 사용할 수 있습니다.
입력 결합 파이프라인에는 다음과 같은 조치를 취하는 것이 좋습니다.
- 예시를 미리 가져오기 위한 입력 파이프라인 계측 (예: tf.data.Dataset.prefetch)
- 파이프라인 초기에 사용되지 않는 기능과 메타데이터를 최대한 빨리 삭제하세요.
- 예를 들어 tf.data 서비스를 사용하여 입력 파이프라인의 예시를 생성하는 작업 수의 복제를 늘릴 수 있습니다.
모델 성능 평가
요약: 학습보다 큰 배치 크기로 평가를 실행합니다. 정기적인 시간 간격이 아닌 정기적인 단계 간격으로 평가를 실행합니다.
평가 설정
다음 설정을 사용하여 모델의 성능을 평가할 수 있습니다.
- 온라인 평가: 모델이 프로덕션 환경에서 예측을 제공할 때 측정항목을 수집합니다. 온라인 평가는 일반적으로 모델이 사용되는 방식과 일치하므로 모델 품질을 가장 현실적으로 평가합니다.
- 오프라인 평가: 모델이 프로덕션 환경을 나타내는 오프라인 학습, 검증 또는 테스트 세트에서 실행될 때 측정항목을 수집합니다. 오프라인 평가는 문제에 따라 상당히 복잡하고 계산 비용이 많이 들 수 있습니다.
- 주기적 평가: 오프라인 평가의 프록시 또는 오프라인 평가에 사용되는 데이터의 하위 집합일 수 있는 모델 학습 중에 측정항목을 수집합니다. 정기 평가는 가장 실용적이고 경제적인 선택이지만 프로덕션 환경을 완전히 나타내지 못할 수도 있습니다. 학습 중에 수신된 신호의 안정성을 저하시키지 않고 오프라인 평가의 편리한 프록시를 사용하는 것을 목표로 합니다.
주기적 평가 설정
다음과 같은 이유로 학습 중에 정기적으로 평가를 실행하는 것이 좋습니다.
- 학습 진행 상황을 실시간으로 모니터링하기 위해
- 소급 적용되는 모델 체크포인트 선택을 용이하게 하기 위해
- 학습 종료 시 학습 곡선을 검사하기 위해
가장 간단한 구성은 동일한 컴퓨팅 인스턴스 내에서 학습과 주기적 평가를 모두 수행하여 학습과 평가 간에 주기적으로 교체하는 것입니다. 이 경우 평가에 사용되는 배치 크기는 최소한 학습에 사용된 배치 크기보다 커야 합니다. 평가 중에 모델 활성화를 유지할 필요가 없기 때문에 예시당 연산 요구사항이 낮아지기 때문입니다.
시간 단위가 아닌 정기적인 단계 간격으로 주기적인 평가 수행 시간 간격을 기준으로 평가하면 특히 학습 작업 선점, 네트워크 지연 시간 등의 문제로 학습이 발생할 경우 학습 곡선을 해석하기가 더 어려워질 수 있습니다.
검증 및 테스트 측정항목의 주기성 (셔플이 적용된 학습 세트, 검증 세트, 테스트 세트 분할을 사용하는 경우)은 다음과 같은 구현 버그를 나타낼 수 있습니다.
- 학습 데이터와 겹치는 테스트 데이터입니다.
- 학습 데이터가 제대로 셔플되지 않고 있습니다.
규칙적인 간격으로 평가하면 이러한 문제를 포착하기가 더 쉬워집니다.
평가 세트는 배치 크기로 나눌 수 없을 때 부분 배치가 발생할 수 있습니다. 손실 함수가 편향되지 않는 것을 방지하려면 배치에 대한 평균 손실을 계산하는 예시와 같이 가중치가 적용된 평균값과 같이 패딩된 예시의 가중치가 올바르게 부여되었는지 확인하세요. 패딩 처리된 예시의 가중치는 0으로 정하는 경우가 많습니다.
오프라인 분석을 지원하기 위해 평가당 충분한 정보를 저장합니다. 디버깅에 매우 유용할 수 있으므로 선택한 개별 예시를 대상으로 예측을 저장하는 것이 이상적입니다. 저장된 모델과 같은 아티팩트를 생성하면 평가 작업이 완료된 후 임시 모델 검사가 간소화됩니다.
주기적 평가를 위한 샘플 선택
주기적인 평가 작업이 적절한 시간 내에 전체 오프라인 평가 세트에서 측정항목을 계산할 만큼 빠르게 실행되지 않을 수 있습니다. 이 문제는 주기적인 평가를 위해 샘플링 데이터가 필요한 경우가 많습니다. 샘플링된 데이터 세트를 생성할 때 불균형 데이터 세트와 관련된 샘플 크기 문제 및 특별한 문제를 고려하세요.
샘플 크기
주기적 작업에서 사용하는 샘플링된 데이터 세트에서 계산된 성능이 전체 오프라인 평가 세트의 성능과 일치하는지 확인합니다. 즉, 샘플링된 데이터 세트와 전체 데이터 세트 간에 편향이 없는지 확인합니다.
주기적 평가에 사용하는 데이터 세트는 다음 두 가지 모두여야 합니다.
- 모델 예측을 전체적으로 생성할 만큼 충분히 작아야 합니다.
- 다음 두 작업을 모두 할 수 있을 만큼 커야 합니다.
- 모델의 개선사항을 정확하게 측정합니다. 즉, 라벨 노이즈로 인해 측정이 과도해서는 안 됩니다.
- 여러 시도에 걸쳐 이러한 평가를 여러 번 수용하고 정확한 추정치를 산출하세요. 즉, 홀드아웃 테스트 세트로 일반화되지 않는 방식으로 시간에 따라 검증 세트에 '적합'하게 적응하는 것을 방지하기에 충분합니다. 그러나 실질적인 고려사항이 되는 경우는 드뭅니다.
불균형 데이터 세트
불균형 데이터 세트의 경우 드물게 소수성 클래스에서 성능이 저하되는 경우가 많습니다. 소수 예의 수가 적은 데이터 세트의 경우 정확하게 예측된 예시의 수를 기록하여 정확성 개선에 관한 유용한 정보를 더 많이 얻습니다. 예를 들어 0.05 민감도 개선은 흥미로운 것 같지만, 한 가지 예가 더 정확하기 때문에 개선되는 건가요?
체크포인트 저장 및 최적의 체크포인트 소급적 선택
요약: 고정된 개수의 단계에 대해 학습을 실행하고 소급하여 실행에서 가장 적합한 체크포인트를 선택합니다.
대부분의 딥 러닝 프레임워크는 모델 체크포인트를 지원합니다. 즉, 모델의 현재 상태가 주기적으로 디스크에 저장됩니다. 체크포인트를 사용하면 학습 작업이 인스턴스 중단을 탄력적으로 회복할 수 있습니다. 특히 검증 세트 성능이 시간이 지남에 따라 계속 증가하지 않고 특정 값에 변동을 보일 때 최적의 체크포인트가 마지막 체크포인트가 아닌 경우가 많습니다.
학습 중에 지금까지 확인한 최적의 체크포인트 N개를 추적하도록 파이프라인을 설정합니다. 학습이 끝나면 모델 선택은 최상의 체크포인트를 선택한다는 의미입니다. 이 접근 방식을 소위 최적의 체크포인트 선택이라고 합니다. 체험판 예산을 미리 지정하고 지금까지 확인된 N개의 최적의 체크포인트를 보존하므로 일반적으로 조기 중단을 지원할 필요가 없습니다.
실험 추적 설정
요약: 여러 실험을 추적할 때 연구에서 체크포인트의 최고 성능이나 간단한 연구 설명 등 여러 가지 필수 항목을 추적합니다.
스프레드시트에서 실험 결과를 추적하는 것이 좋습니다. Google 스프레드시트에는 보통 다음과 같은 열이 포함됩니다.
- 연구 이름
- 학습 구성이 저장된 위치의 링크입니다.
- 연구의 메모 또는 간단한 설명입니다.
- 실행 시도 횟수
- 연구에서 최고의 체크포인트의 검증 세트에 대한 성능
- 학습을 실행하기 위해 제출되지 않은 변경사항에 관한 구체적인 재현 명령어 또는 참고사항
최소한 위에 나열된 정보를 캡처하는 편리한 추적 시스템을 찾습니다. 추적되지 않는 실험도 존재하지 않을 수 있습니다.
배치 정규화 구현 세부정보
요약: 최근에는 일괄 정규화를 LayerNorm으로 교체할 수 있는 경우가 많지만, 이러한 교체를 수행할 수 없는 경우 배치 크기나 호스트 수를 변경할 때 세부정보가 복잡합니다.
배치 정규화는 현재 배치의 평균과 분산을 사용하여 활성화를 정규화합니다. 그러나 다중 기기 설정에서 이러한 통계는 명시적으로 동기화되지 않는 한 기기마다 다릅니다. 일례의 보고서 (주로 ImageNet)는 약 64개의 예시만 사용하여 이러한 정규화 통계를 계산하는 것이 실제로 더 효과적이라는 것을 보여줍니다. 고스트 배치 정규화에 관한 설명은 더 오래 학습하고 일반화하기: 대규모 신경망 학습의 일반화 격차 해소를 참고하세요. 총 배치 크기와 배치 표준 통계를 계산하는 데 사용된 예의 수를 분리하면 배치 크기 비교에 특히 유용합니다.
고스트 배치 정규화 구현이 기기별 배치 크기가 가상 배치 크기보다 큰 경우 제대로 처리하지 않는 경우도 있습니다. 이 경우 적절한 배치 배치 표준 통계 예시를 얻으려면 각 기기에서 배치를 서브샘플링해야 합니다.
테스트 모드 일괄 정규화에 사용되는 지수 이동 평균 (EMA)은 학습 통계의 선형 조합일 뿐입니다. 따라서 이러한 EMA를 체크포인트에 저장하기 전에 동기화하기만 하면 됩니다. 그러나 일괄 정규화의 일부 일반적인 구현은 이러한 EMA를 동기화하지 않고 첫 번째 기기의 EMA만 저장합니다.
멀티 호스트 파이프라인 고려사항
요약: 로깅, eval, RNG, 체크포인트, 데이터 샤딩의 경우 멀티 호스트 학습을 사용하면 매우 쉽게 버그를 도입할 수 있습니다.
멀티 호스트 파이프라인에 다음을 수행합니다.
- 파이프라인이 하나의 호스트에서만 로깅 및 체크포인트를 수행하는지 확인합니다.
- 체크포인트 또는 체크포인트 전에 여러 호스트 간에 일괄 정규화 통계를 동기화합니다.
- 일반적으로 호스트 간에 데이터 파일을 샤딩하면 성능이 향상됩니다.
중요: RNG 시드가 호스트 간에 동일하고(모델 초기화의 경우) 호스트 간에 다른 시드(데이터 셔플/사전 처리)를 사용합니다. 따라서 적절하게 표시해야 합니다.