1. 다시 실행하기 전에 메시지와 상황을 남겨 두세요
대기열에 작업을 더 이상 추가하지 마세요. 오류 메시지의 정확한 문구, 관련된 파일이나 질문, 함께 처리한 항목 수, 도달한 단계를 기록하세요. 모델이 로드 중이었는지, 연산이 진행 중이었는지, 아니면 출력을 쓰고 있었는지 확인하세요. 설정은 메모로, 이미 완료된 결과는 해당 폴더에 보관하세요.
화면이 멈췄다거나 아무 설명 없이 앱이 종료됐다는 것만으로는 원인을 알 수 없습니다. 로그가 있다면 찾아보세요. 연결 끊김, 잘못된 입력, 메모리 포화는 인터페이스에서 비슷한 증상을 일으킬 수 있습니다. 소프트웨어가 아무것도 알려주지 않는다면 「원인 미확인」이라고 적고, 추측으로 진단을 지어내기보다 최소한의 테스트를 준비하세요.
2. GPU 메모리, 시스템 메모리, 디스크 공간을 구분하세요
GPU 메모리는 그래픽카드에서 연산에 쓰이는 요소를 위한 것입니다. 서버의 RAM과 저장 공간은 다른 용도입니다. BriefGPU의 GPU 사양에 표시된 용량은 실제로 사용 가능한 RAM이나 디스크를 나타내지 않습니다. 메시지에서 언급한 리소스와 사용 환경의 정보를 확인하세요.
Python에서 MemoryError는 메모리 할당 실패를 뜻하며, 이 이름만으로 VRAM 부족을 의미하지는 않습니다. ENOSPC 코드는 대상 장치의 공간 부족을 나타냅니다. 이런 단서들은 탐색 방향을 알려주지만, 어떤 작업인지 찾아내려면 여전히 애플리케이션 로그가 필요합니다.
| 관찰 | 첫 번째 점검 | 더 큰 GPU만으로는 해결되지 않는 것 |
|---|---|---|
| 연산 중 CUDA out of memory 메시지 | 그래픽카드 메모리 사용량, 다른 작업, 배치 크기 | 소프트웨어 비호환 또는 손상된 파일 |
| 파일 읽기 중 MemoryError | 프로세스 메모리, RAM에 로드한 데이터 양 | 폴더 전체를 시스템 메모리에 로드 |
| 내보내기 중 No space left on device | 출력 또는 임시 폴더의 공간과 할당량 여부 | 디스크 가득 참 또는 저장 한도 |
| 쓸 만한 메시지 없이 앱이 종료됨 | 로그, 도달한 단계, 항목 하나로 시험 | 아직 알 수 없는 원인 |
3. 항목 하나와 작업 하나만 활성화된 상태로 돌아가세요
먼저 직접 실행한 작업들을 확인하세요. 미리보기, 이전 세션, 다른 도구가 아직 작동 중일 수 있습니다. 상태를 보관한 뒤 더 이상 필요 없는 작업은 제대로 종료하세요. 알아보지 못하는 프로세스를 끝내거나, 진단 시간을 몇 분 아끼려고 전체 환경을 재시작하지 마세요.
실패한 항목을 품질 저하 없이 단독으로 다시 실행하세요. 단독으로는 통과하지만 묶음으로 하면 실패한다면 동시 처리 개수가 단서가 됩니다. 예를 들어 네 개 묶음을 두 개로, 필요하면 하나로 줄여 보세요. 폴더의 파일 수는 그대로이고, 동시에 처리하는 양만 달라집니다.
일부 도구는 메모리 급증을 억제하기 위해 순차 처리를 제공합니다. Diffusers는 특히 이미지 묶음의 디코딩 분할을 문서화하고 있습니다. 이 기능은 사용하는 파이프라인에 따라 다르니, 다른 모델용으로 찾은 설정을 켜기 전에 해당 옵션을 확인하세요.
4. 원하는 결과를 잃지 않으면서 부하를 줄이세요
개별 입력이 실패하면 해당 입력의 크기나 길이를 확인하세요. 이미지의 경우 2,048 × 2,048에서 1,024 × 1,024로 줄이면 픽셀 수가 4분의 1로 줄어듭니다. 이것이 전체 메모리도 4분의 1로 줄어든다는 것을 보장하지는 않습니다. 모델과 다른 요소들은 각자의 요구 사항을 그대로 유지하기 때문입니다. 축소는 출력이 필요한 세부 정보를 유지할 때만 허용됩니다.
어시스턴트의 경우 제공된 문서, 질문, 생성된 답변을 구분하세요. 생성 캐시는 컨텍스트가 길면 메모리를 더 많이 사용할 수 있으며, 정확한 메커니즘은 모델에 따라 다릅니다. 더 짧은 요청이나 한 번에 하나의 요청만 시도해 보세요. 답변이 포함된 구절을 제거한 다음 문제가 해결되었다고 판단하지 마세요.
항상 원본 입력을 보관하세요. 시험용 변형에 이름을 붙이고 무엇이 달라지는지 적어 두세요. 도구에서 타일 분할이나 일부 요소의 RAM 전송을 제공한다면 설명서를 확인하고 이음새, 품질, 관측된 시간을 점검하세요. VRAM을 절약하는 옵션은 제약을 다른 곳으로 옮길 수 있습니다.
5. 예약된 메모리와 실제 사용 메모리를 혼동하지 마세요
PyTorch에서는 할당자가 예약한 메모리와 텐서가 차지하는 메모리가 서로 다른 측정값입니다. 사용하지 않는 캐시를 비워도 아직 활성 상태인 텐서는 해제되지 않습니다. 따라서 정리 명령이 너무 큰 부하를 호환 가능한 부하로 바꿔 주지는 않습니다.
애플리케이션을 깨끗하게 다시 실행하면 도움이 되는 경우, 그다음에 동일한 작은 사례를 다시 실행하고 결과를 기록하세요. 재시작 후 성공했다는 것만으로 메모리 누수가 해결되었다고 증명되지는 않습니다. 동일한 작업을 반복할 때마다 사용량이 증가한다면 이 관찰을 보관하고 재실행을 쌓기 전에 소프트웨어 설명서나 지원에 문의하세요.
예시: 열두 장의 이미지 폴더에서 문제를 분리하기
다음은 하드웨어 측정 없이 구성한 예시 시나리오입니다. 한 프리랜서가 이미지 열두 장을 준비하는데, 그중 두 장은 크기가 크고 가는 텍스트가 들어 있습니다. 네 장씩 묶어 처리하면 실패합니다. 그녀는 메시지를 남겨 두고, 큰 이미지 중 하나를 원래 품질로 단독 처리해 봅니다. 표는 나타날 수 있는 관찰 결과를 어떻게 해석할지 보여줍니다.
이 시나리오에서 그녀는 큰 이미지 두 장을 함께 처리하고 일반 이미지 몇 장도 처리해 본 뒤에야 두 장씩 묶는 방식을 채택합니다. 내보낸 파일에서 텍스트와 윤곽을 확인합니다. 이 결과를 모든 이미지 크기, 모든 모델, 다른 소프트웨어에 일반화하지는 않습니다.
| 시나리오 시도 | 가상 관찰 | 국소적 결정 |
|---|---|---|
| 동시에 네 장의 이미지 | 메모리 실패 | 오류를 보관하고 그룹 축소 |
| 큰 이미지 한 장, 동일한 설정 | 완전하고 수용 가능한 출력 | 목표 품질이 이 단독 사례에서는 통과 가능 |
| 큰 이미지 두 장을 함께 | 완전하고 수용 가능한 출력 | 이 그룹을 짧은 구간에서 시험 |
| 이미지를 크게 축소 | 계산은 완료, 텍스트 판독 불가 | 기술적 성공에도 불구하고 이 축소는 배제 |
다른 용량이 정당한 다음 단계가 될 때
GPU 메모리 부족이 확인되고, 반드시 필요한 사례가 단독으로 실패하며, 품질에 맞는 축소로 충분하지 않을 때 다른 카드를 비교하세요. 관련 소프트웨어, 버전, 매개변수, 입력을 유지하세요. 이 자료가 다음 시도를 비교 가능하게 해 줍니다. 정확히 몇 GB를 더 추가하면 충분한지는 추론할 수 없습니다.
모델 로딩 시 오류도 그룹 축소의 실효성을 제한할 수 있습니다. 부하의 상당 부분이 첫 입력 전에 이미 존재하기 때문입니다. 정밀도나 양자화 옵션은 실행 조건을 바꾸고 때로는 결과도 바꾸므로 별도 시도가 필요합니다. 배치를 추가한다고 해서 여러 카드의 메모리가 자동으로 통합되지는 않습니다.
활용 가능한 진단으로 마무리하기
정리 노트는 다섯 가지 항목으로 충분합니다: 메시지와 단계, 의심되는 리소스, 보관된 입력, 통과 또는 실패한 설정, 수행한 품질 확인. 아직 알 수 없는 점도 추가하세요. 작은 사례가 하나도 작동하지 않으면 전체 배치 반복을 멈추고 이 정보를 가지고 도움을 요청하세요.
디스크를 확보하려고 유일한 원본을 삭제하지 말고, 여러 매개변수를 한꺼번에 낮추지 말고, 부분 출력을 성공으로 간주하지 마세요. 유효한 결과를 저장할 시간을 확보하세요. 진단은 불확실성을 줄여야 하며, 끝없는 설정 조정 세션으로 변할 필요는 없습니다.