조대협 288

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..

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

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

#20. ChatGPT에서 대화 히스토리 유지하기

조대협 (http://bcho.tistory.com) 노트 : 이글은 LLM 개발 프레임웍 Langchain의 일부 글입니다. 연재 글은 https://bcho.tistory.com/category/%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%83%80%20%26%20%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D/%EC%83%9D%EC%84%B1%ED%98%95%20AI%20%28ChatGPT%20etc%29 를 참고하세요. LLM 기반의 챗봇 에서는 질문에 대한 답변을 기존의 대화의 내용이나 컨텍스트(문맥)을 참고하는 경우가 많다. 예를 들어, “서울에서 유명한 여행지는 어디야?” 라는 질문 후에, “그 근처에 맛있는 식당이 어디있어?” 라고 질문을 하면 챗봇은 서울의 유..

카테고리 없음 2024.02.21

#19 ChatGPT에서 질문과 관련된 웹페이지 크롤링하기

조대협 (http://bcho.tistory.com) Langchain 에서 Agent가 사용하는 Tool을 사용자가 쉽게 개발해서 추가할 수 있다. 이번 예제에서는 DuckDuckSearch Tool을 이용하여, 질문에 관련된 웹사이트를 검색한후, 그 중 한 웹사이트의 내용을 크롤링해서 웹페이지 내용을 읽어온후에, 이를 요약하는 예제를 만들어 본다. 이를 위해서 웹페이지를 크롤링하는 툴을 BeautifulSoup 을 이용해서 만들어 본다. 커스텀 툴을 정의하는 방법은 몇가지가 있는데, 이 예제에서는 데코레이터를 사용하는 방법과 StructuredTool을 사용하는 방법 두가지를 살펴보자. 먼저 decorator를 사용하는 방법이다. HEADERS = { 'User-Agent': 'Mozilla/5.0 ..