00:00:00이것은 마이크로소프트의 오픈 소스 라이브러리인 딥스피드(DeepSpeed)입니다. 파이토치에 바로 연결해 메모리 문제를 해결해주죠.
00:00:07보통은 바로 충돌이 날 법한 모델도 GPU 한 대에 과부하 없이 올릴 수 있게 해줍니다. 대형 모델이 실패하는 건 느려서가 아닙니다.
00:00:14옵티마이저 상태, 그래디언트, 파라미터가 VRAM을 가득 채우기 때문인데요. 딥스피드의 비결은 훈련 상태를 분산하는 ZeRO 기술입니다.
00:00:23모든 곳에 같은 데이터를 중복해서 저장하지 않는 방식이죠. 계속해서 영상이 올라올 예정이니 구독 잊지 마세요.
00:00:30이제 바로 시작해서 실행해 봅시다. 저는 맥북 M4 Pro를 사용 중이라 구글 코랩에서 실행할 예정입니다.
00:00:40엔비디아 GPU가 없어서 조금 까다롭긴 하지만, 코랩을 활용하면 충분히 가능합니다.
00:00:46먼저 GPU 상태를 빠르게 체크한 다음, 필요한 패키지들을 설치하겠습니다.
00:00:51파이토치, 허깅페이스, 딥스피드 등을 설치하고, DS 리포트를 실행해 CUDA와 컴파일러 설정이 제대로 됐는지 확인합니다.
00:00:59매끄러운 실행을 위해 몇 가지 설치를 더 진행해줍니다.
00:01:02그다음 딥스피드 설정을 위해 JSON 파일을 만들 겁니다. 이 설정 파일이 핵심입니다.
00:01:09우선 ZeRO 단계 2부터 시작하죠. 옵티마이저 상태와 그래디언트를 여러 GPU에 분산하여 메모리 사용량을 획기적으로 줄입니다.
00:01:14이때 모델 파라미터는 복제된 상태로 유지됩니다. 너무 복잡하게 생각하지 마세요, 저도 이것 때문에 꽤나 고생했거든요.
00:01:22공식 문서를 참고해 하나씩 차근차근 바꾸시고, 이것저것 무작정 추가하고 싶은 충동은 참으셔야 합니다.
00:01:28설정값은 허깅페이스나 딥스피드 공식 문서에서 모두 찾아볼 수 있습니다.
00:01:34저 역시 파이썬 스크립트 대부분을 이 문서들에서 가져왔습니다.
00:01:37다만 제 시스템, 특히 맥 환경에서 더 잘 돌아가도록 몇 가지 수정을 거쳤습니다.
00:01:42만약 이 단계에서 막힌다면 거기서 멈추세요. 대부분의 딥스피드 문제는 모델이 아니라 CUDA 버전 불일치 때문이니까요.
00:01:48이제 전부 실행해서 제대로 돌아가는지 확인해 보겠습니다.
00:01:51빠른 실행을 위해 이번 예제에서는 용량이 작은 데이터셋을 가져와 사용하겠습니다.
00:01:58몇 분 뒤 결과를 보면, 진행 단계와 최대 GPU 메모리 사용량을 확인할 수 있습니다.
00:02:03보시는 것처럼 이번 실행에서 훈련 손실(loss) 값이 크게 변하거나 떨어지지는 않았습니다.
00:02:08하지만 최적화를 거치거나 더 큰 데이터셋을 사용하면 손실 값을 개선할 수 있죠.
00:02:13사람들이 흔히 오해하는 부분이 있는데, 그러다가 결국 메모리 부족 오류를 겪곤 합니다.
00:02:16ZeRO에는 여러 단계가 있으며, 각 단계는 단 하나의 질문에 답합니다. “단일 GPU에 무엇을 저장하지 않아도 되는가?”
00:02:241단계는 옵티마이저 상태를 분산하고, 2단계는 거기에 그래디언트까지 분산합니다.
00:02:30이로써 메모리를 몰래 갉아먹는 요소들을 더 깊게 제거하게 되죠. 그리고 ZeRO 3단계가 있습니다.
00:02:36이게 가장 강력합니다. 옵티마이저 상태, 그래디언트, 그리고 파라미터까지 모두 분산합니다.
00:02:40메모리 절약 효과가 가장 크지만, 이것만으로 부족할 때도 있습니다.
00:02:45그래도 모델이 안 올라간다면, ZeRO-Infinity를 통해 CPU나 NVMe까지 데이터를 오프로드할 수 있습니다.
00:02:50속도를 희생해 규모를 얻는 셈이죠. 하지만 가끔은 모델을 일단 돌릴 수 있게 만드는 것 자체가 승리입니다.
00:02:56메모리만이 유일한 고민이 아니라고 생각하신다면 맞습니다. 딥스피드는 데이터, 파이프라인, 텐서 병렬 처리를 포함한 3D 병렬 처리를 지원합니다.
00:03:04또한 전문가 혼합(MoE) 모델을 기본으로 지원하죠.
00:03:09덕분에 희소(sparse) 모델도 연산 자원을 과하게 잡아먹지 않습니다.
00:03:12선택지가 정말 다양해졌죠. 딥스피드는 허깅페이스 및 Accelerate와 잘 통합됩니다.
00:03:19따라서 모든 것을 밑바닥부터 직접 만들 필요가 없습니다.
00:03:21기본적으로 필요한 것만 가져다 쓰고 나머지는 무시하면 됩니다. 벤치마크는 설정에 따라 천차만별입니다.
00:03:27그러니 너무 높은 수치들을 맹신하지는 마세요. 저도 몇 번 테스트를 해봤습니다.
00:03:30말씀드렸듯 M4 Pro를 사용 중이라, 이 기본 모델만으로는 더 이상의 최적화가 어려웠습니다.
00:03:36확언하긴 어렵지만, 다른 딥스피드 프로젝트들은 처리량 면에서 큰 이득을 보여주었습니다.
00:03:41특히 메모리가 한계였던 상황에서 윈도우나 리눅스 사용자라면 엄청난 효과를 볼 수 있을 겁니다.
00:03:46솔직히 가장 좋은 방법은 일단 해보는 겁니다. 공식 설정값을 사용하는 것부터 시작하세요.
00:03:51저도 그렇게 시작해 맥에 맞춰 조금 수정하고 CUDA 이슈를 해결했습니다.
00:03:56오프로드를 활성화한다면 CPU RAM을 잘 살피시고, 나중에 다중 GPU를 쓰게 된다면
00:04:01Accelerate가 큰 도움이 될 겁니다. 딥스피드는 한마디로 “오늘은 절대 메모리 부족 안 뜬다” 버튼과 같습니다.
00:04:07ZeRO와 오프로딩 원리만 이해하면, 한정된 하드웨어에서도 거대 모델을 실용적으로 다룰 수 있습니다.
00:04:14물론 처음에 세팅하는 과정은 분명 헷갈릴 수 있습니다.
00:04:17이 영상이 GPU 시간을 아껴주었거나 이런 개발 도구들을 좋아하신다면 구독해 주세요. 다음 영상에서 뵙겠습니다.