Transcript
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 시간을 아껴주었거나 이런 개발 도구들을 좋아하신다면 구독해 주세요. 다음 영상에서 뵙겠습니다.
Community Posts
No posts yet. Be the first to write about this video!
Write about this video