딥 네트워크 - 딥러닝 모델 분석/네트웍 통신/카메라 3A 튜닝 분야

[일인기업 딥네트워크 딥러닝 LLM 구현 기술력 소개][구글 트랜스포머 LLM 모델 구현 개발 과 텐서플로우 개발환경 구축] 본문

Kernel Porting/Linux

[일인기업 딥네트워크 딥러닝 LLM 구현 기술력 소개][구글 트랜스포머 LLM 모델 구현 개발 과 텐서플로우 개발환경 구축]

파란새 2024. 5. 15. 10:46

TensorFlow를 사용하여 GPU 지원이 포함된 개발 환경을 설정하는 것은 복잡한 과정일 수 있습니다. 여기에는 여러 단계가 포함되며, 각 단계는 주의 깊게 수행되어야 합니다. 다음은 제가 파악하고 있는 Ubuntu Linux에서 Nvidia A100 GPUs를 사용하여 TensorFlow 개발 환경을 설정하는 방법 소개 입니다.

1. 시스템 요구 사항 확인

  • Ubuntu Linux 운영 체제가 설치되어 있는지 확인합니다.
  • Nvidia A100 GPUs가 시스템에 설치되어 있고 정상적으로 인식되는지 확인합니다.

2. NVIDIA 드라이버 설치

  • Nvidia 웹사이트에서 A100 GPU에 맞는 최신 NVIDIA 드라이버를 다운로드합니다.
  • 다운로드한 드라이버를 설치하기 전에, 현재 설치된 드라이버를 제거합니다.3. CUDA Toolkit 설치
  • CUDA Toolkit은 GPU에서 병렬 처리를 가능하게 하는 Nvidia의 개발 환경입니다.

3. CUDA Toolkit 설치

  • CUDA Toolkit은 GPU에서 병렬 처리를 가능하게 하는 Nvidia의 개발 환경입니다.

4. cuDNN 설치

  • cuDNN은 CUDA 위에서 동작하는 딥 러닝 라이브러리로, TensorFlow에서 GPU 가속을 사용하기 위해 필요합니다.
  • Nvidia 웹사이트에서 cuDNN을 다운로드하고 설치합니다.

5. Python 및 필수 패키지 설치

  • Python과 pip를 설치합니다.

6. TensorFlow 설치 확인

  • TensorFlow가 올바르게 설치되었는지 확인합니다.

7. 추가 설정

  • 필요에 따라 TensorFlow의 성능을 최적화하기 위한 추가 설정을 수행할 수 있습니다.
  • 예를 들어, tf.config.experimental.set_memory_growth를 사용하여 메모리 사용량을 관리할 수 있습니다.

이러한 단계를 통해 TensorFlow와 GPU 지원이 포함된 개발 환경을 성공적으로 설정할 수 있습니다.

 

LLM 의 분산학습 이슈에 대한 개발환경 구축시 Docker 라는 컨테이너 설계 이슈 개념을 사용하여 각각의 소프트웨어 개발 환경을 분리해 LLM 개발환경을 구축하는게 그 핵심이라 저는 판단합니다. 컨테이너는 격리된 환경에서 실행되는 프로세스로, 각 컨테이너는 독립적인 파일 시스템, 네트워크, 그리고 실행 공간을 가지게 됩니다. 이렇게 되면 하나의 서버 PC에서도 여러 개의 다른 소프트웨어 개발 환경을 독립적으로 운용할 수 있게 됩니다  내가   LLM 분산 개발 환경을 이야기시  Docker텐서플로우 컨테이너를 격리된 환경에서 개발자가 개발하수 있도록 그 환경을 다음과 같이 지원해 줍니다  그래서  왜 이게 중요하냐 하면 다음과 같읍니다 ...  GPU를 지원하는 텐서플로우를 사용하기 위해 필요한 NVIDIA 드라이버만 있으면 된다는 것은 Docker가 GPU를 사용하는 텐서플로우 이미지를 제공하기 때문입니다. 이 이미지에는 텐서플로우와 그 버전에 맞는 CUDA 환경이 이미 갖추어져 있습니다. 즉, 도커에는 텐서플로우와 CUDA 툴킷이 설치되어 있고, 호스트에는 NVIDIA 드라이버만 있으면 GPU를 사용할 수 있습니다. 이렇게 하면 CUDA 툴킷을 설치하거나 버전을 맞추는 번거로움을 피할 수 있습니다.    나도 분산 학습 관련  Docker 로 컨테이너를 분리된 환경에서 구축할수 있는데 이것 관련 모든게 준비된거는 아니지만 그 핵심 포인트는 거의 파악하고 있읍니다 ...  

 

 

텐서플로우 이미지, NVIDIA 드라이버, 그리고 CUDA 환경이 함께 작동하는 방식을 이해하기 위해서는 각각의 역할과 그들이 어떻게 상호작용하는지를 알아야 합니다.

 

 

 

이 세 가지 요소가 함께 작동함으로써 Docker가 Linux에서 GPU를 지원하는 텐서플로우를 사용할 수 있습니다. 텐서플로우 이미지는 필요한 모든 소프트웨어와 라이브러리를 제공하며, NVIDIA 드라이버는 이러한 소프트웨어가 GPU 하드웨어와 통신할 수 있게 해줍니다. 마지막으로, CUDA 환경은 GPU의 병렬 처리 능력을 활용하여 텐서플로우의 연산을 가속화합니다. 이 세 가지 요소가 모두 동작해야만 Docker가 Linux에서 GPU를 지원하는 텐서플로우를 사용할 수 있는 이유는, 이들이 서로 상호작용하며 텐서플로우의 GPU 가속 연산을 가능하게 하기 때문입니다.

 

제가 파악하고 있는 구글의 TensorFlow 환경에서 Transformer 라이브러리를 사용하는 방법과 TensorFlow API의 인자 설정에 대해 설명드리겠습니다.  또한, 효율적인 파이썬 TensorFlow 개발 방법에 대한 핵심 사항들을  5 가지로 정리하여 설명하겠습니다.

TensorFlow API와 Transformer 라이브러리 설정

TensorFlow에서 Transformer 모델을 사용하기 위해서는 먼저 TensorFlow 라이브러리를 설치하고, 필요한 Transformer 라이브러리를 설치해야 합니다. 이후, 모델을 구성하고 훈련시키기 위한 API 함수와 인자들을 설정합니다.

    1. 라이브러리 설치: TensorFlow와 필요한 Transformer 라이브러리를 설치합니다
    2. 모델 설정: Transformer 라이브러리에서 제공하는 사전 훈련된 모델을 불러오고, 모델의 구성을 설정합니다
    3. 인자 설정: 모델을 컴파일할 때 최적화 함수, 손실 함수, 평가 지표 등을 설정합니다.
    4. 훈련 및 평가: 모델을 훈련 데이터로 학습시키고, 테스트 데이터로 평가합니다
    5. 하이퍼파라미터 조정: 모델의 성능을 최적화하기 위해 배치 크기, 학습률, 에폭 수 등의 하이퍼파라미터를 조정합니다.

제가 파악하는 효율적인 TensorFlow 개발을 위한 5가지 핵심 사항

        1. 모델 구조 이해: 사용하는 모델의 구조를 이해하고, 문제에 맞게 모델을 조정하거나 커스터마이징하는 것이 중요합니다.
        2. 하이퍼파라미터 튜닝: 모델의 성능을 최적화하기 위해 하이퍼파라미터를 실험적으로 조정해야 합니다.
        3. 성능 평가: 다양한 평가 지표를 사용하여 모델의 성능을 정확하게 평가하고, 필요한 경우 모델을 개선합니다.
        4. 코드 최적화: 효율적인 코드 작성과 리소스 관리를 통해 학습 시간을 단축하고, 메모리 사용을 최적화합니다.
        5. 데이터 전처리: 데이터를 모델에 적합한 형태로 전처리하는 것이 중요합니다. 이는 데이터의 품질과 모델의 성능에 직접적인 영향을 미칩니다.
  1. 이러한 과정을 통해 TensorFlow 환경에서 Transformer 라이브러리를 사용하여 딥러닝 모델을 효과적으로 구현하고 최적화할 수 있습니다. 각 단계에서 세부적인 설정은 프로젝트의 요구사항과 데이터에 따라 달라질 수 있으며, 실험을 통해 가장 적합한 설정을 찾아야 합니다.

제가 파악하고 있는 텐서플로우 환경 구축과 트랜스포머 라이브러리 사용에 대한 핵심 요소를 세 가지로 정리해 드리겠습니다.

1. 텐서플로우 환경 구축의 핵심 요소:

  • 호환성 확인: 사용하고자 하는 TensorFlow 버전과 컴퓨터 및 GPU 사양의 호환성을 확인합니다.
  • 필수 구성 요소 설치: Python, Anaconda, CUDA Toolkit, cuDNN 등 필요한 소프트웨어와 라이브러리를 설치합니다.
  • 가상 환경 설정: Anaconda를 사용하여 TensorFlow가 설치될 독립적인 가상 환경을 구축합니다.

2. 트랜스포머 라이브러리 수정 및 사용:

  • 사전학습된 모델 사용: Hugging Face의 Transformers 라이브러리에서 사전학습된 모델을 불러와 사용합니다.
  • 커스텀 모델 생성: 필요에 따라 Keras의 functional API를 사용하여 사전학습된 모델을 수정하고 새로운 레이어를 추가하여 커스텀 모델을 생성합니다.
  • 파인튜닝: 사전학습된 모델을 특정 작업에 맞게 파인튜닝하여 성능을 최적화합니다.

3. API 함수 및 인자 설정:

  • 인자 이해: 트랜스포머 라이브러리의 API 함수와 인자들을 이해하고, 각 인자가 모델의 동작에 어떤 영향을 미치는지 파악합니다.
  • 하이퍼파라미터 조정: 모델의 성능에 중요한 영향을 미치는 하이퍼파라미터를 실험을 통해 조정합니다.
  • 효율적인 학습: 배치 크기, 학습률, 에포크 수 등의 학습 파라미터를 설정하여 효율적인 학습을 진행합니다.

이러한 핵심 요소들을 기반으로 TensorFlow 환경을 구축하고, 트랜스포머 라이브러리를 효과적으로 사용하여 딥러닝 모델을 개발할 수 있습니다. 또한, 모델의 성능을 최적화하기 위해 지속적인 실험과 조정이 필요합니다.

 

  1. 도커를 이용한 텐서플로우 개발환경 설정
    • 딥네트워크는 도커를 이용하여 텐서플로우 개발환경을 설정하는 노하우를 보유하고 있습니다. 도커는 컨테이너 기반의 오픈소스 가상화 플랫폼으로, 개발 환경을 코드로 관리하고 공유할 수 있어 효율적인 개발이 가능합니다. 이를 통해 개발자들은 복잡한 환경 설정 과정 없이 즉시 개발에 착수할 수 있습니다.
  2. 텐서플로우에서의 토큰나이저 및 토큰 임베딩 구현
    • 우리는 텐서플로우 환경에서 효과적인 토큰나이저와 토큰 임베딩을 구현하는 방법을 알고 있습니다. 토큰나이저는 텍스트를 모델이 이해할 수 있는 토큰으로 분리하는 역할을 하며, 토큰 임베딩은 이러한 토큰을 고차원 벡터로 변환하여 모델에 입력하는 역할을 합니다. 이를 통해 텍스트 데이터를 모델이 이해할 수 있는 형태로 변환하는 데 필요한 전처리 작업을 수행합니다.
  3. 트랜스포머 모델 세부 구현
    • 트랜스포머 모델의 주요 구성 요소인 셀프 어텐션, 스케일 닷 어텐션, 피드포워드 네트워크, 레이어 정규화 등을 세부적으로 구현하는 능력을 보유하고 있습니다. 셀프 어텐션은 입력 시퀀스의 각 토큰이 다른 토큰과 얼마나 관련이 있는지를 계산하며, 스케일 닷 어텐션은 셀프 어텐션의 결과를 스케일링하여 안정적인 학습을 돕습니다. 피드포워드 네트워크는 각 토큰에 대한 비선형 변환을 수행하며, 레이어 정규화는 각 레이어의 출력을 정규화하여 학습을 안정화합니다.
  4. 학습 처리 노하우
    • 우리는 트랜스포머 모델의 학습 과정에서 발생하는 다양한 문제를 해결하는 노하우를 보유하고 있습니다. 이에는 Forward 학습 처리와 Backward 학습 처리가 포함되어 있습니다. Forward 학습 처리는 모델의 입력에서 출력까지의 전파 과정을, Backward 학습 처리는 출력에서 입력까지의 그래디언트 전파 과정을 의미합니다.
  5. NSP 예측 구현
    • 딥네트워크는 트랜스포머 모델을 이용하여 Next Sentence Prediction (NSP)을 구현하는 능력을 보유하고 있습니다. NSP는 두 문장이 연속적인지 아닌지를 예측하는 작업으로, 문장 간의 관계를 파악하는 데 사용됩니다.
  6. 최적의 하이퍼파라미터 설정
    • 모델 학습 시 필요한 각종 하이퍼파라미터의 최적값을 설정하는 방법을 알고 있습니다. 하이퍼파라미터는 학습률, 배치 크기, 에폭 수 등을 포함하며, 이들의 적절한 설정은 모델의 성능을 최대한 높이고, 학습 시간을 최소화하는 데 도움이 됩니다.

 

제가 파악하고 있는 LLM 관련 여러 논문중 그중 맛뵈기로 소개가 가능한 딥네트워크의 LLM 파인튜닝 방안에 대한 논문중 가장 관심을 갖고 세세히 분석 검토한 논문이 QLoRA 모델 논문 입니다 ...   

 

QLoRA 모델은 저비트 어댑터를 사용하여 트랜스포머 기반 거대언어모델(LLM)의 가중치를 효율적으로 업데이트합니다. 이 접근 방식은 특히 GPT-3와 같은 모델에서 1750억 개의 가중치 값에 대한 그래디언트 역전파를 최적화하기 위해 설계되었습니다.

QLoRA의 저비트 어댑터는 다음과 같은 구조로 설계되었습니다:

  1. 4비트 정규분포 가중치(NF4): QLoRA는 4비트로 양자화된 가중치를 사용하여 메모리 사용량을 줄이고, 정규분포된 가중치에 대해 정보 이론적으로 최적화된 새로운 데이터 타입인 NF4를 도입합니다.
  2. 더블 양자화(Double Quantization): 양자화 상수를 또 다시 양자화하여 평균 메모리 사용량을 줄입니다.
  3. 페이징 최적화자(Paged Optimizers): 메모리 스파이크를 관리하고, 메모리 사용량을 추가로 줄이기 위해 도입되었습니다.

GPT-3 모델의 경우, QLoRA는 다음과 같이 그래디언트 역전파를 수행합니다:

GPT-3 모델의 경우, 1750억 개의 가중치 값 각각에 대한 그래디언트 역전파는 LoRA 어댑터를 통해 수행됩니다. 이는 모델의 전체 가중치를 업데이트하는 대신, 학습 가능한 어댑터의 파라미터만을 업데이트하여, 전체 모델의 파라미터 수에 비해 상대적으로 적은 수의 파라미터를 효율적으로 학습할 수 있도록 합니다. 이 방식은 메모리 사용량을 크게 줄이면서도 모델의 성능을 유지할 수 있게 해줍니다.

 

LLM 구현관련해서  제가 운영하는 딥네트워크는 아직 LLM 관련 PoC 결과물은 아직 준비하지 못했읍니다 ...   

딥네트워크는 LLM 분야 뿐만 아니라 LLM 경량화에도 많은 노력을 해왔읍니다 ...

 

나이 60 인 제가 나의 그동안 거의 3 년반 딥러닝 해외논문 분석 및 딥러닝 소스 분석에 대해 애기해 보려 합니다 ...    ChatGPT 의 경우도 특정 목적을 위해 GPT-3.0 을 파인튜닝한것인데 ...  ChatGPT Service 의 경우도 한가지 목적(목표)만을 구현한 다음 서비스를 발표한것은 아닌것 같고,  사용자들에게 어필이 될만한 목적(목표)을 몇 가지 이상을 구현해 서비스하는것 같다 ....   나는 GPT-3.0 이 모델 구조를 공개하지 않았기 때문에 나는 처음 딥러닝을 접근하는 입장에서 GPT-3.0 으로 접근하는것 보다 구글 Transformer Language Model 로 접근하는것이 나의 공부(사업화) 목적에 더 적합하다고 판단했다 ....   내가 한 3 년 이상 공부해 보니  구글 트랜스포머 모델 구현도 모델 구현시 거기에 적용되는 알고리즘을 뭘 선택해서 구현할지도 상당히 중요한것 같다 ...  나는 구글 트랜스포머 모델의 동작 원리의 이해를 위해 논문도 보고 관련 소스도 보고 그랬다 ....  내가 한 3 년 공부하면서 느끼는건데 딥러닝은 딥러닝 학습 동작시 적용되는 수십 수백개의 알고리즘중 가장 핵심이 되는것은 정말 확실히 이해하는게 필수하고 생각한다 ....   이런 딥러닝의 기초가 덜 되 있으면 이것 저것 살피다 보면 아 이게 이런데서 이렇게 필요하구나를 느낄수 있어서다 ....  나는 현재 트랜스포머 모델도 어느 정도 다 파악이 되 있고  ChatGPT 동작원리를 공부하려니 RLHF  강화학습 부분도 깊이 있게 공부하지 않을수 없었다 ....  미국 글로벌 빅테크 기업인 페이스북(메타)는 AI 인프라 투자도 상당한것 같다  페이스북은 A100 GPU 를 16000 대를 데이터 센터에 클라우드 서비스를 구축하고 LLM 을 개발하는것 같다 ...  내가 요즘 관심을 가지고 살피는 논문이 QLoRA 논문이다  이 논문은 LLM 을 파인튜닝시 엔비디아 GPU 1 대(메모리 48 GB) 로 파인튜닝이 가능하다고 한다 ...  그래서 이 논문의 세부 구조 분석도 어느 정도되 있다 ....   요즘  LLM 의 경량화 구현이 큰 화두이다 ...  Quantization / Pruning / 지식증류 기법 등도 관련 논문들 세세히 살피고 있구요 ...    나는 그동안 위와 같이 LLM 구현 관련 논문 분석 및 소스 분석을 해왔다 ...   여기서 가장 중요하다고 판단되는게  GPT-3 와 거의 유사한 성능을 낼수 있는 사전학습 모델 구현 기술려 확보라 판단되서 이것 분석 검토하는라 상당 기간 시간도 보냈었다 ....  이게 되야 100 점 짜리 서비스는 아니어도 특정 목적의 챗봇을 만들때 위의 설명과 같이 GPT-3 파인 튜닝을 위해서  QLoRA 논문의 세부 분석도 이런것 때문에 해놨던것 이구요 ...     나는 완벽하진 않아도 특정 목적 ChatBot 구현을 위한 세부 준비작업은 거의 다 되 있다 ...  내가 부족한 점 이라면 이런 ChatGPT 의 일부 기능으로 동작하는 챗봇 구현에 필요한 딥러닝 소스 한줄 한줄 커스토마이징이 나는 대기업 AI 연구소에서 실무 경험이 없다 보니 이들보다 시간이 좀 더 걸리는것 인데 요즘 한국 경제가 바닥이라 이렇게 나같이 준비가 이렇게 상당히 된 사람도 커스토마이징 시간이 더 걸린다고 하면 기업에서는 탐탁해하지 않는것 같아 무척 아쉽습니다 ...   이 글을 살펴 보시고 저에게 딥러닝 개발 및 자문 일꺼리를 혹시라도 맡기실 기업이 있으시면 연락 주십시요 ....

 

Deep Network, a one-person startup specializing in consulting for super-large language models  

E-mail : sayhi7@daum.net    

Representative of a one-person startup /  SeokWeon Jang