찾다
기술 주변기기일체 포함제한된 GPU 리소스로 매우 큰 모델을 미세 조정하는 방법

제한된 GPU 리소스로 매우 큰 모델을 미세 조정하는 방법

질문: 모델 크기가 GPU 용량을 초과하는 경우 어떻게 해야 하나요?

이 기사는 Yandex School of Data Analysis에서 진행하는 "효율적인 딥 러닝 시스템" 과정에서 영감을 받았습니다.

기본 지식: 독자는 신경망의 정방향 및 역방향 전달이 어떻게 작동하는지 이미 이해하고 있다고 가정합니다. 이는 이 기사의 내용을 이해하는 데 중요합니다. 이 기사에서는 PyTorch를 프레임워크로 사용합니다.

시작해 보세요!

5억 개가 넘는 매개변수가 포함된 대형 모델(일명 gpt-2-xl)을 사용하려고 하고 GPU 리소스가 제한되어 있는 경우 이를 설치하여 GPU에서 실행하거나 모델 훈련 중에 실행할 수 없습니다. 이 기간 동안 논문에 정의된 배치 크기를 달성할 수 없으면 어떻게 해야 합니까? 어쩌면 더 가벼운 버전의 모델을 포기하고 사용하거나 훈련 배치 크기를 줄여 문서에 설명된 훈련 결과를 얻지 못할 수도 있습니다.

그러나 위의 문제를 해결하는 데 도움이 될 수 있는 몇 가지 기술이 있습니다.

15억 개의 매개변수로 GPT-2-XL 모델을 미세 조정하는 방법에 대한 몇 가지 방법을 논의해 보겠습니다.

문제의 핵심

먼저, 모델을 GPU에 로드하는데 필요한 GPU 메모리 문제의 본질을 이해합시다.

모델에 FP32(32비트 부동 소수점) 매개변수가 있다고 가정하면 이 모델은 GPU에서 학습해야 합니다(예: Adam 최적화 프로그램 실행).

계산을 통해 나온 결과는 충격적입니다.

제한된 GPU 리소스로 매우 큰 모델을 미세 조정하는 방법

이미 12GB 메모리를 갖춘 NVIDIA GeForce RTX 3060이 있다고 가정해 보겠습니다. 첫째, 1e9 FP32 매개변수는 약 4GB의 GPU 메모리를 차지합니다.

마찬가지로 동일한 양의 메모리가 그라디언트에 예약됩니다. 따라서 아직 훈련이 시작되지 않았고 옵티마이저가 로드되지 않았기 때문에 총 8GB의 메모리가 예약되어 있으므로 옵티마이저를 로드하려면 일정량의 메모리도 필요합니다. Adam 최적화 프로그램은 각 매개변수에 대한 첫 번째 및 두 번째 백업을 저장해야 하며, 이를 위해서는 8GB의 추가 메모리가 필요합니다. 이를 계산하면 모델을 GPU에 올바르게 로드하려면 약 16GB의 GPU 메모리가 있어야 합니다. 이 예에서 GPU에는 12GB의 여유 메모리만 있습니다. 안 좋아 보이는데요?

이 문제를 해결하기 위한 몇 가지 방법이 있습니다. 다음은 관련 방법입니다.

  • 그라디언트 축적/마이크로 배치
  • 그라디언트 체크포인트;
  • 모델 병렬 훈련,
  • 파이프라인 작업
  • 텐서 병렬화
  • 혼합 정밀 훈련;
  • 메모리 오프로드
  • 최적화 8비트 양자화.
다음으로 이러한 기술에 대해 자세히 설명하겠습니다.

시작

질문: 모델이 GPU 용량보다 큰 경우 어떻게 해야 하나요?

  • 단순 모드: 배치 크기 1
  • 전문 모드: 매개변수도 조정할 수 없음

개요

모델이 그 이상인 경우 GPU 용량보다 배치 크기를 1로 설정해도 충분하지 않은데 어떻게 해야 할까요? 그래디언트 체크포인트를 설정하는 솔루션이 있습니다. 이 개념을 살펴보겠습니다. n개의 레이어를 포함하는 간단한 피드포워드 신경망의 경우 기울기 계산 다이어그램은 다음과 같습니다.

제한된 GPU 리소스로 매우 큰 모델을 미세 조정하는 방법

신경망 레이어의 활성화는 순방향에서 f로 표시된 노드에 해당합니다. 패스 중에 이러한 모든 노드는 순서대로 평가됩니다. 이러한 레이어의 활성화 및 매개변수에 해당하는 손실 기울기는 b로 표시된 노드로 표시됩니다. 역방향 전달 동안 이러한 모든 노드는 역순으로 평가됩니다. f 노드의 계산 결과는 b 노드를 계산하는 데 사용되므로 모든 f 노드는 앞으로 전달된 후 메모리에 유지됩니다. 역전파가 노드 f의 모든 종속성을 계산할 수 있을 만큼 충분히 진행된 경우에만 메모리에서 지울 수 있습니다. 이는 단순 역전파에 필요한 메모리가 신경망 레이어 수 n에 따라 선형적으로 증가함을 의미합니다.

다음은 이러한 노드의 계산 순서입니다. 보라색 음영 원은 주어진 시간에 메모리에 저장해야 하는 노드를 나타냅니다.

제한된 GPU 리소스로 매우 큰 모델을 미세 조정하는 방법

Gradient Checkpoint

위에서 설명한 간단한 역전파는 계산상 최적입니다. 즉, 각 노드를 한 번만 계산합니다. 그러나 노드를 다시 계산하면 많은 메모리를 절약할 수 있습니다. 예를 들어 각 노드를 간단히 다시 계산할 수 있습니다. 실행 순서와 사용되는 메모리는 아래 그림과 같습니다.

제한된 GPU 리소스로 매우 큰 모델을 미세 조정하는 방법

이 전략은 메모리 측면에서 최적입니다. 그러나 노드 계산 수는 이전 배율 인수 n과 비교하여 n²배로 배율 조정됩니다. 각 n 노드는 순차적으로 n배로 다시 계산됩니다. 계산 속도가 느리기 때문에 이 방법은 딥러닝에 적합하지 않습니다.

메모리와 계산 사이의 균형을 유지하려면 노드를 너무 자주 재계산하지 않도록 하는 전략을 제안해야 합니다. 여기서 사용되는 전략은 신경망 활성화의 하위 집합을 체크포인트 노드로 표시하는 것입니다.

제한된 GPU 리소스로 매우 큰 모델을 미세 조정하는 방법

이 예에서는 sqrt(n)번째 노드를 체크포인트로 표시하도록 선택합니다. 이렇게 하면 체크포인트 노드 수와 체크포인트 사이의 노드 수가 sqrt(n) 사이가 됩니다. 즉, 필요한 메모리 양도 n의 순서로 확장됩니다. 이 전략에 필요한 추가 계산은 네트워크를 통한 단일 전달에 필요한 계산과 동일합니다.

루틴:

그라디언트 체크포인트의 세부 사항을 배운 후 PyTorch에서 이 개념을 적용하는 방법을 살펴보겠습니다. 별로 어렵지 않을 것 같습니다.

제한된 GPU 리소스로 매우 큰 모델을 미세 조정하는 방법

그라디언트 축적/마이크로 배치

제한된 GPU 리소스로 매우 큰 모델을 미세 조정하는 방법

Overview

딥 러닝 모델은 점점 커지고 있으며 이러한 대규모 신경망을 GPU 메모리에 맞추기가 어렵습니다. 따라서 훈련 중에 더 작은 배치 크기를 선택해야 하며, 이로 인해 수렴 속도가 느려지고 정확도가 낮아질 수 있습니다.

그라디언트 축적이란 무엇인가요?

신경망을 훈련할 때 데이터는 일반적으로 배치로 나뉘며 신경망은 실제 목표에 대한 손실을 계산하는 데 사용되는 배치 레이블을 예측합니다. 다음으로, 역방향 전달을 수행하여 기울기를 계산하고 모델 가중치를 업데이트합니다. 경사 누적은 훈련 과정의 마지막 단계를 수정합니다. 다음 미니 배치를 계속하기 전에 각 미니 배치에 대한 네트워크 가중치를 업데이트하는 대신 경사 값을 저장하고 이전에 저장된 경사에 새 경사를 추가합니다. 가중치는 모델이 여러 미니 배치를 처리한 후에만 업데이트됩니다. 그라데이션 누적은 더 큰 배치 크기를 시뮬레이션합니다. 작은 배치에서 64개의 이미지를 사용하려는 경우 배치 크기가 8을 초과하면 "CUDA 메모리 오류..."가 보고됩니다. 이 경우 8개의 이미지 배치를 사용하고 모델이 64/8 = 8개의 배치를 처리한 후 가중치를 한 번 업데이트할 수 있습니다. 이 8개 배치 각각에서 그래디언트를 누적하면 결과는 (거의) 동일하며 훈련을 수행할 수 있습니다!

루틴:

경사 누적이 없는 표준 훈련 루프는 일반적으로 다음과 같습니다.

제한된 GPU 리소스로 매우 큰 모델을 미세 조정하는 방법

PyTorch에서는 경사 누적을 쉽게 수행할 수 있습니다. Accumulation_steps를 사용하여 모델이 미니 배치 처리를 완료한 후 최적화를 수행할 수 있습니다. Accumulation_steps는 손실 함수의 특성에 따라 실행 손실을 나누는 데에도 사용할 수 있습니다.

제한된 GPU 리소스로 매우 큰 모델을 미세 조정하는 방법

정말 아름답죠? loss.backward()가 호출될 때 기울기가 계산되고, Optimizer.zero_grad()가 호출될 때 PyTorch가 중지될 때까지 PyTorch에 의해 누적됩니다.

중요

일부 네트워크 아키텍처는 BatchNorm과 같은 전용 배치 작업을 사용하며 동일한 배치 크기를 사용하는 경우 결과가 약간 다를 수 있습니다.

혼합 정밀 훈련

개요

혼합 정밀 훈련은 FP32 매개변수의 일부 또는 전체를 FP16, TF16(부동 포인트 텐서) 또는 BF16(부동 소수점 바이트).

주요 장점

혼합 정밀 교육의 주요 장점은 다음과 같습니다.

  • 메모리 사용량 감소; ance 가속도(더 높은 계산 속도) 기술적 강점 또는 통신 사용량 감소)
  • 더 빠른 계산을 위해 전용 하드웨어를 사용하세요.
  • 현재 저는 첫 번째 이점인 메모리 사용량 감소에만 관심이 있습니다. PyTorch 모델을 사용하여 이를 달성하는 방법을 살펴보겠습니다.

루틴:

결과적으로 .half() 작업을 완료한 후 모델이 2배 작아졌습니다. 모델을 다른 형식(예: BF16, TF16)으로 변환한 후의 스케일링 손실은 후속 기사에서 논의됩니다. Softmax와 같은 일부 작업은 FP16에서 완료할 수 없습니다. PyTorch는 torch.autocast를 사용하여 이러한 특별한 경우를 처리할 수 있습니다.

8비트 최적화 프로그램

모델 크기를 늘리는 것은 더 나은 성능을 얻는 효과적인 방법입니다. 그러나 대규모 모델을 교육하려면 모델, 기울기 및 최적화 상태(예: Adam의 지수 평활합 및 이전 기울기의 제곱합)를 저장해야 하며, 모두 제한된 양의 사용 가능한 메모리에 저장됩니다.

32비트 최적화 프로그램을 8비트 최적화 프로그램으로 다운그레이드하여 값 범위를 2³²에서 2⁸=256으로 줄이면 최적화 프로그램이 예약하는 메모리 양에 큰 영향을 미칩니다.

연구원들은 새로운 8비트 Adam 최적화 프로그램을 제안했습니다. 논문의 저자는 "원래 메모리의 일부로 32비트 성능을 유지합니다."라고 말했습니다.

8비트 최적화에는 세 가지 구성 요소가 있습니다. (1) 이상값을 격리하고 오류를 모든 비트에 균등하게 분배하는 블록 수준 양자화(2) 작은 값과 큰 값을 높은 값으로 양자화하는 동적 양자화 정확도 값 (3) 단어 임베딩 최적화 모델의 안정성을 향상시키기 위한 안정적인 임베딩 레이어.

이러한 구성 요소를 사용하면 8비트 상태를 사용하여 직접 최적화를 수행할 수 있습니다. 8비트 최적화 프로그램 상태를 32비트로 양자화하고 업데이트를 수행한 다음 저장을 위해 상태를 8비트로 양자화합니다. 8비트에서 32비트로의 변환은 양자화 및 역양자화를 수행하기 위해 GPU 메모리에 대한 느린 복사나 추가 임시 메모리가 필요 없이 레지스터에서 요소별로 수행됩니다. GPU의 경우 이는 8비트 최적화 프로그램이 일반 32비트 최적화 프로그램보다 빠르다는 것을 의미합니다.

8비트 Adam을 사용한 후 고무적인 결과를 살펴보겠습니다.

제한된 GPU 리소스로 매우 큰 모델을 미세 조정하는 방법

GPU 메모리를 약 8.5GB 절약할 수 있음을 알 수 있습니다. , 정말 멋져요!

사용성을 이해한 후 Python으로 구현하는 방법을 살펴보겠습니다.

Facebook에서 제공하는 Bitsandbytes 패키지는 CUDA 사용자 정의 함수에 대한 경량 래퍼로, 8비트 Adam 사용을 구현하는 데 사용할 수 있는 8비트 최적화 프로그램 및 양자화 함수를 캡슐화합니다.

루틴:

제한된 GPU 리소스로 매우 큰 모델을 미세 조정하는 방법

위에서 언급했듯이 양자화 최적화 프로그램의 사용은 매우 간단하고 결과가 좋습니다.

위의 모든 방법을 결합하여 GPU에서 GPT-2-XL을 미세 조정하세요.

마지막으로 위의 방법을 익힌 후 이러한 방법을 사용하여 실제 문제를 해결하고 15억 개의 매개변수로 GPT-2-XL 모델을 미세 조정하세요. 분명히 12GB RAM을 갖춘 NVIDIA GeForce RTX 3060 GPU에 로드할 방법은 없습니다. 사용할 수 있는 모든 방법을 나열하세요.

  • Gradient 체크포인트
  • 비결을 설정했습니다. 동일한 모델의 두 샘플을 사용합니다. 먼저 .half를 사용하여 GPU에 로드하고 이름을 gpu_model로 지정합니다. CPU, 이름을 cpu_model로 지정하고, gpu_model의 그래디언트를 cpu_model에 로드하고,optimizer.step()을 실행하고, 업데이트된 매개변수를 gpu_model에 로드합니다.
  • batch_size=64, minibatch_size=4를 사용하세요. 그래디언트 축적, 손실은 축적 단계에 따라 조정되어야 합니다.
  • 8비트 Adam 최적화 프로그램.

위의 방법을 모두 사용하고 코드를 확인하세요.

제한된 GPU 리소스로 매우 큰 모델을 미세 조정하는 방법

위의 방법을 모두 사용한 후 16GB GPT-2-XL 모델의 미세 조정이 구현되었습니다. GPU!

결론

이 블로그에서는 위에서 언급한 것처럼 다양한 어려운 작업에 적합한 효율적인 메모리 사용의 핵심 개념이 제공되었습니다. 다른 개념은 후속 기사에서 논의될 것입니다. 시간을 내어 이 기사를 읽어주셔서 정말 감사합니다!

위 내용은 제한된 GPU 리소스로 매우 큰 모델을 미세 조정하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 51CTO.COM에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
외삽에 대한 포괄적 인 가이드외삽에 대한 포괄적 인 가이드Apr 15, 2025 am 11:38 AM

소개 매일 몇 주 만에 작물의 진행 상황을 관찰하는 농부가 있다고 가정합니다. 그는 성장률을보고 몇 주 안에 식물이 얼마나 키가 커질 수 있는지에 대해 숙고하기 시작합니다. Th

소프트 AI의 부상과 오늘날 비즈니스의 의미소프트 AI의 부상과 오늘날 비즈니스의 의미Apr 15, 2025 am 11:36 AM

Soft AI-대략적인 추론, 패턴 인식 및 유연한 의사 결정을 사용하여 구체적이고 좁은 작업을 수행하도록 설계된 AI 시스템으로 정의 된 것은 모호성을 수용하여 인간과 같은 사고를 모방하려고합니다. 그러나 이것이 바이러스의 의미는 무엇입니까?

AI 국경을위한 진화 보안 프레임 워크AI 국경을위한 진화 보안 프레임 워크Apr 15, 2025 am 11:34 AM

클라우드 컴퓨팅이 클라우드 네이티브 보안 도구로의 전환이 필요했기 때문에 AI는 AI의 고유 한 요구를 위해 특별히 설계된 새로운 유형의 보안 솔루션을 요구합니다. 클라우드 컴퓨팅 및 보안 수업의 상승이 배웠습니다 th

3 가지 방법 생성 AI 기업가를 증폭시킵니다 : 평균을 조심하십시오!3 가지 방법 생성 AI 기업가를 증폭시킵니다 : 평균을 조심하십시오!Apr 15, 2025 am 11:33 AM

기업가와 AI 및 생성 AI를 사용하여 비즈니스를 개선합니다. 동시에, 모든 기술과 마찬가지로 생성 AI를 기억하는 것이 중요합니다. 앰프는 앰프입니다. 엄격한 2024 연구 o

Andrew Ng의 모델 임베딩에 대한 새로운 단기 과정Andrew Ng의 모델 임베딩에 대한 새로운 단기 과정Apr 15, 2025 am 11:32 AM

임베딩 모델의 힘 잠금 해제 : Andrew Ng의 새로운 코스에 대한 깊은 다이빙 기계가 완벽한 정확도로 질문을 이해하고 응답하는 미래를 상상해보십시오. 이것은 공상 과학이 아닙니다. AI의 발전 덕분에 R이되었습니다

대형 언어 모델 (LLMS)에서 환각이 불가피합니까?대형 언어 모델 (LLMS)에서 환각이 불가피합니까?Apr 15, 2025 am 11:31 AM

대형 언어 모델 (LLM) 및 환각의 피할 수없는 문제 Chatgpt, Claude 및 Gemini와 같은 AI 모델을 사용했을 것입니다. 이들은 대규모 텍스트 데이터 세트에 대해 교육을받은 강력한 AI 시스템의 대형 언어 모델 (LLM)의 예입니다.

60% 문제 - AI 검색이 트래픽을 배출하는 방법60% 문제 - AI 검색이 트래픽을 배출하는 방법Apr 15, 2025 am 11:28 AM

최근의 연구에 따르면 AI 개요는 산업 및 검색 유형에 따라 유기 트래픽이 15-64% 감소 할 수 있습니다. 이러한 급격한 변화로 인해 마케팅 담당자는 디지털 가시성에 관한 전체 전략을 재고하게합니다. 새로운

AI R & D의 중심에 인간 번성을하는 MIT Media LabAI R & D의 중심에 인간 번성을하는 MIT Media LabApr 15, 2025 am 11:26 AM

Elon University의 Digital Future Center를 상상 한 최근 보고서는 거의 300 명의 글로벌 기술 전문가를 조사했습니다. 결과적인 보고서 인‘2035 년에 인간이되는 것’은 대부분 AI 시스템의 심화가 T에 대한 우려가 있다고 결론지었습니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기