분류 전체보기 1283

6. Pytorch - 대규모 분산학습에서 고려할 사항

대규모 분산 학습에서 고려할 사항조대협 (http://bcho.tistory.com) 그러면 실제로 분산 학습은 어떻게 이루어질까, 하나의 머신에서 여러 GPU를 사용하는 멀티 GPU의 경우에는 코드만 싱글 GPU 코드와 다르지 다른 설정은 다르지 않다. 그러나 멀티 머신 학습의 경우에는 각 머신에서 학습 코드를 실행해줘야 하고, 같은 데이터 소스로 부터 데이터를 각 머신에서 읽어와야 한다. 그렇다면 동시에 여러 머신에 학습 코드를 어떻게 실행할까?스케쥴러수동으로, 특정 서버에서 각각 학습 코드를 실행할 수 도 있지만, 보통 수십,수백개의 머신에서 하나의 학습만을 돌리는 일은 드물다. 중간 중간 실험을 위해서 작은 모델을 학습하기도 하고, 전체 머신들에서 하나의 거대 모델들을 돌리기도 한다.  만약 50..

5. 파이토치 - 분산 학습의 개념과 하드웨어

분산학습의 개념조대협 (http://bcho.tistory.com)분산 학습 개념분산학습이란, 모델이 커서 하나의 머신이나 장치(CPU,GPU) 에서 학습이 불가능할때, 모델을 여러개의 GPU나 또는 여러개의 머신으로 나눠서 학습을 하는 방법이다.분산 학습의 방법분산 학습 방법은 크게 모델 병렬화 (Tensor Parallelism), 데이터 병렬화 (Data Parallelism) 으로 분류 할 수 있다.   출처 https://uvadlc-notebooks.readthedocs.io/en/latest/tutorial_notebooks/scaling/JAX/tensor_parallel_simple.html 데이터 병렬화 : Distributed Data Parallelism (이하 DDP)라고 하는데,..

GTM 전략의 이해

GTM 전략의 이해조대협 (http://bcho.tistory.com)  IT 시스템은 기존의 비즈니스를 지원하거나 또는 IT 서비스 자체가 제품이 되는 경우인데, 이러한 IT 서비스를 설계하기 위해서는 개발하고자 하는 시스템이 제공하는 가치와 그 비즈니스를 이해해야 한다. 비즈니스의 이해가 없이, 비지니스에 활용되는 시스템을 설계 한다는 것은 전체 그림을 보지 못하면서 일부만을 이해하고 그 일부가 전체인 것처럼 이해하고 시스템을 구축하기 때문에, 좋은 시스템이 만들어질 수 없다. 비즈니스에서 제품/서비스를 기획하고, 이를 마케팅,판매하고 측정하는 일련의 계획을 GTM 전략이라고 한다. GTM 전략 GTM(Go-to-Market) 전략은 기업이 새로운 제품이나 서비스를 시장에 성공적으로 출시하고 판매하기..

비지니스 2024.09.03

파이토치 분산 학습 도구 비교

1. 개요torch.distributed.launch와 torchrun은 둘 다 PyTorch에서 분산 학습을 실행하기 위한 도구이다.torch.distributed.launch는 이전부터 사용되어 온 유틸리티이며, torchrun은 더 최근에 등장한 도구로 사용 편의성을 개선했다.2. 주요 차이점 torch.distributed.launchtorchrun사용 편의성--local_rank 인자를 수동으로 스크립트에 전달해야 함--local_rank 자동 처리기능 범위기본적인 분산 학습 실행 기능 제공torch.distributed.launch 기능 + 탄력성(elasticity), 오류 처리 등 추가 기능 제공오류 처리worker 실패 시 자동 재시작 기능 없음worker 실패 시 자동 재시작 기능 제공..

파이토치 4 - 쿠버네티스에서 학습하기

파이토치 모델을 학습을 하는데 여러 사람이 동시에 작업을 하거나 또는 학습이 멀티 GPU, 멀티 노드를 사용할 경우에는 한정된 GPU 자원을 어떻게 배치할지에 대한 어려움이 생긴다. 또한 파이토치 작업이 학습도중에 중단되거나 했을때 자동으로 학습을 재시작하는 것과 같은 자동화된 관리가 필요한데, 이런 문제를 해결하기 위해서 가장 보편적으로 사용되는 접근 방법이 쿠버네티스나 Slurm등이 될 수 있다.  향후에 멀티 머신 기반의 학습이나 Fault Torelent 아키텍처를 기반으로한 분산 모델 학습 방법에도 설명하겠지만, 이 글에서는 간단하게 모델을 쿠버네티스에서 학습할 수 있는 방법에 대해서 알아본다.  아래 코드는 파이토치 라이트닝을 이용하여 Fashion Mnist 데이터를 학습하는 간단한 DNN ..

파이토치 3. 파이토치라이트닝

파이토치 라이트닝 파이토치 라이트닝은 파이토치를 한번 더 추상화하는 프레임웍으로, 파이토치 코딩의 복잡도를 낮춰주는 프레임이다. 텐서플로우의 복잡도를 케라스로 잡아주는 느낌이라고 할까? 한번더 추상화하는 만큼, 약간의 성능저하가 발생한다.  아래와 같은 간단한 선형 회귀 모델이 있다고 하자.import osimport torchfrom torch import nnimport torch.nn.functional as Ffrom torch.utils.data import DataLoaderimport lightning as Lfrom torch.utils.data import TensorDataset# 데이터x_train = torch.FloatTensor([[1], [2], [3]])y_train = t..

파이토치 2. 선형회귀 (Linear Regression)을 통한 코드 구조 이해

파이토치의 모델 코드 구조를 이해해보자.먼저 가장 간단한 선형 회귀 모델 코드를 살펴보자. 아래는 전체 코드 블럭이다. 아래 코드는 "모두를 위한 딥러닝 시즌 2 파이토치 편"을 참고하였다. https://deeplearningzerotoall.github.io/season2/lec_pytorch.htmlimport matplotlib.pyplot as pltimport numpy as npimport torchimport torch.nn as nnimport torch.nn.functional as Fimport torch.optim as optim# 데이터x_train = torch.FloatTensor([[1], [2], [3]])y_train = torch.FloatTensor([[1], [2],..

Python yield

`yield`는 Python에서 generator를 만드는 데 사용되는 키워드다. `yield`를 사용하면 함수의 실행을 일시 중지하고 값을 반환한 다음, 호출자가 필요할 때 실행을 재개할 수 있다. 이 기능을 사용하면 메모리를 효율적으로 사용하면서 큰 데이터 스트림을 처리할 수 있다. 이를 설명하기 위해 주어진 예제를 살펴보자.def return_abc(): print("From return_abc") return list("ABC")def yield_abc(): i=0 for char in list("ABC"): yield(char) i +=1 print(str(i) + " From yield_abc")for ch in return_abc(): print("Calling re..

파이토치 1. 기본 자료형 텐서

파이토치는 기본 자료형으로 행렬을 표현하는 텐서라는 자료형을 사용한다.아래 코드는 간단하게 배열로 부터 텐서를 생성하고, 이를 곱하는 코드이다. 곱셈은 matmul 함수를 이용하거나 @ 를 이용할 수 있다. # Multiply Tensorsimport torcha = torch.tensor([[1,2],[3,4]])b = torch.tensor([[1],[1]])c = torch.matmul(a, b)print(c)print(a@b) GPU에 텐서 생성파이토치에서는 텐서를 생성할때 텐서가 저장되는 메모리를 지정할 수 있다. 일반적인 메모리나 또는 GPU가 있을 경우 GPU 메모리를 지정할 수 있다.아래 코드는 GPU가 있을 경우 텐서 a,b를 GPU에 저장하고 서로 곱한 결과를 출력하는 코드이다. # p..

LLM 애플리케이션 아키텍처 (1/2)

LLM 애플리케이션 아키텍처 (1/2) 조대협 (http://bcho.tistory.com) ChatGPT나, Gemini 모델과 같은 LLM 을 이용한 애플리케이션을 개발하는 형태를 보면, 보통 LLM에 프롬프트 엔지니어링을 사용한 프롬프트를 입력으로 사용하고, 리턴을 받아서 사용한다. 그리고 약간 발전된 형태의 경우에는 파인 튜닝을 사용하거나, 아주 발전된 형태는 외부 문서 저장소를 사용하는 형태 정도의 수준으로 개발한다. 즉 LLM을 한번 정도 호출하는 정도의 구조를 가지고 있다. 그러나 운영환경에 올라가는 LLM 기반의 애플리케이션의 구조는 이것보다 훨씬 복잡하다. 아래 그림은 LLM 애플리케이션의 아키텍처 예시이다. 단순하게 프롬프트를 작성해서 LLM을 한번만 호출하는 것이 아니라, 여러 예제를..