내 PC에 직접 GPT를 깔아 실행시켜보자

최근 인공지능(AI) 기술의 발전으로 대규모 언어 모델(LLM)인 GPT(Generative Pre-trained Transformer)가 주목받고 있습니다. GPT는 자연어 처리(NLP) 분야에서 혁신적인 성과를 보여주며, 텍스트 생성, 문서 요약, 자동 번역 등 다양한 분야에서 활용되고 있습니다. 하지만 많은 사람들이 이 모델을 사용하려면 고성능 GPU가 필수적이라고 생각합니다. 그러나 오늘은 GPU 없이도 BitNet CPP를 먼저 설치하고 이후에 그 바탕위에 GPT를 실행해 챗봇이나 문서생성 등의 기능을 실행하는 방법을 알아보겠습니다.

이제 고가의 GPU 없이도 CPU만으로 대규모 언어 모델을 구동할 수 있는 시대가 열렸습니다. 여러분의 PC에서 직접 GPT 모델을 설치하고 실행하는 방법을 단계별로 설명해 드리며, 이를 통해 AI 모델이 어떻게 로컬에서 활용될 수 있는지 체험해보도록 하겠습니다.

BitNet CPP를 로컬 컴퓨터에 설치하려면 몇 가지 필수 요구 사항을 충족하고 설치 절차를 따라야 합니다. 아래는 AMD 또는 인텔 CPU 기반 시스템에서 BitNet CPP를 설치하는 단계별 방법을 자세히 설명한 내용입니다.

1. 시스템 요구 사항 확인

먼저, BitNet CPP를 설치하기 위해서는 다음과 같은 요구 사항을 만족해야 합니다.

  • 64비트 CPU: AMD 또는 인텔 CPU를 사용한 64비트 환경이어야 합니다. 실험 결과에 따르면, AMD 라이젠 7 8코어, 64GB RAM을 탑재한 시스템에서 7억 개 모델까지는 무리 없이 추론이 가능하며, 최대 300억 개 모델까지도 효율적으로 운용할 수 있는 것으로 나타났습니다. CPU만으로도 초당 300단어 이상을 처리할 수 있는 수준의 추론 속도를 보여주며, 매우 빠른 처리 능력을 자랑합니다.

    이 외에도 인텔 i7-13700H와의 비교 테스트 결과도 제공되었는데, AMD 라이젠 CPU가 멀티코어 성능에서 우수함을 확인할 수 있었습니다. 특히, 1비트 양자화를 활용하여 700억 개 이상의 파라미터를 가진 모델도 충분히 CPU에서 구동할 수 있다는 점이 흥미롭습니다.

  • 운영체제: Ubuntu, CentOS와 같은 리눅스 기반 운영체제 또는 macOS 환경에서 실행할 수 있습니다. Windows의 경우 **Windows Subsystem for Linux (WSL)**을 사용해 Ubuntu를 설치할 수 있습니다.
  • CMake 3.22 이상: CMake는 빌드 시스템을 설정하는 도구입니다.
  • Clang 18 또는 GCC: C++ 컴파일러로 Clang이나 GCC가 필요합니다.
  • Python 3.9 이상: BitNet CPP는 Python 인터페이스를 지원하므로 Python이 필요합니다.
  • Git: 소스 코드를 다운로드하기 위해 필요합니다.

1. Windows Subsystem for Linux (WSL) 설치

BitNet CPP는 리눅스 기반으로 동작하기 때문에, 먼저 WSL을 설치하여 리눅스 환경을 준비해야 합니다. WSL은 Windows에서 리눅스 환경을 실행할 수 있게 해주는 도구입니다.

1.1 WSL 활성화

  1. 명령 프롬프트 또는 PowerShell을 관리자 권한으로 실행합니다.
  2. WSL 설치 명령을 입력하여 WSL과 Ubuntu를 설치합니다.
bash
wsl --install

이 명령어는 기본적으로 Ubuntu를 설치하며, WSL 2가 자동으로 활성화됩니다.

  1. 설치 후 컴퓨터를 재부팅합니다.

1.2 Ubuntu 설치 완료 및 설정

재부팅 후 Windows에서 Ubuntu 앱을 실행합니다. 처음 실행하면 사용자 이름과 비밀번호를 설정하라는 메시지가 나타납니다. 이 정보를 입력하여 기본 리눅스 환경을 설정합니다.

2. 필수 소프트웨어 설치

BitNet CPP를 설치하려면 먼저 필수 소프트웨어를 설치해야 합니다. 리눅스 기반 시스템을 기준으로 설명드리겠습니다.

2.1 CMake 설치

bash
sudo apt update
sudo apt install -y cmake

2.2 Clang 설치

Clang을 설치하기 위해 다음 명령어를 입력합니다.

bash
sudo apt install -y clang

2.3 Python 설치

Python 3.9 이상 버전이 필요합니다. 만약 Python이 설치되어 있지 않다면, 다음과 같이 설치합니다.

bash
sudo apt install -y python3 python3-pip

설치된 Python 버전을 확인하려면 다음 명령어를 입력하세요.

bash
python3 --version

2.4 Git 설치

BitNet CPP의 소스 코드를 클론하기 위해 Git을 설치합니다.

bash
sudo apt install -y git

3. BitNet CPP 소스 코드 다운로드

BitNet CPP 소스 코드는 GitHub에서 호스팅되고 있습니다. 이를 로컬로 클론합니다.

bash
git clone https://github.com/microsoft/BitNet.git

다운로드가 완료되면 BitNet 디렉토리로 이동합니다.

bash
cd BitNet

4. 의존성 설치

BitNet CPP는 몇 가지 필수 의존성 패키지가 필요합니다. 이를 설치하기 위해서는 requirements.txt 파일에 정의된 패키지들을 설치해야 합니다.

bash
pip3 install -r requirements.txt

Python 패키지 설치가 완료되면, CMake를 사용해 프로젝트를 설정할 준비가 완료됩니다.

5. CMake를 사용해 빌드 환경 설정

BitNet CPP는 CMake를 사용하여 빌드됩니다. 먼저 build 디렉토리를 생성한 후 CMake 명령을 실행하여 빌드 환경을 설정합니다.

bash
mkdir build
cd build
cmake ..

위 명령은 CMakeLists.txt 파일에 정의된 설정을 기반으로 컴파일 환경을 구성합니다.

6. BitNet CPP 컴파일

CMake 설정이 완료되면, make 명령어를 사용하여 BitNet CPP를 컴파일합니다.

bash
make -j$(nproc)

위 명령어에서 -j$(nproc)는 컴파일을 병렬로 수행하는 명령으로, 컴퓨터의 CPU 코어 수만큼 병렬 컴파일을 수행합니다. 이 명령어는 컴파일 속도를 크게 향상시킵니다.

7. BitNet CPP 실행

컴파일이 완료되면 BitNet CPP를 사용할 준비가 완료되었습니다. 이제 BitNet CPP의 Python 인터페이스를 사용할 수 있습니다. Python 스크립트나 Jupyter Notebook에서 사용할 수 있으며, BitNet을 불러오고 AI 모델을 추론하는 코드로 작성할 수 있습니다.

예를 들어, Python에서 다음과 같은 코드를 작성하여 BitNet CPP 모델을 로드하고 추론을 수행할 수 있습니다.

python

import bitnet

# 모델 로드
model = bitnet.load_model(‘path_to_model’)

# 추론 수행
output = model.infer(“This is a test sentence.”)
print(output)

 

8. GPT모델 준비 

BitNet CPP가 성공적으로 설치되면, LLM(대규모 언어 모델)을 준비해야 합니다. OpenAI의 GPT나 Hugging Face에서 제공하는 다양한 모델을 사용하여 BitNet CPP와 함께 사용할 수 있습니다.

먼저, BitNet CPP가 이미 로컬 시스템에 설치되어 있다고 가정합니다. 이제 GPT 모델을 다운로드하고 BitNet CPP에서 사용할 준비를 하겠습니다. 여기서는 Hugging Face에서 제공하는 GPT 모델을 사용하여 BitNet CPP에서 구동하는 방법을 설명합니다.

1.1 필수 패키지 설치

먼저 GPT 모델을 다운로드하고 실행하기 위해, Hugging Face의 transformers 라이브러리와 PyTorch가 필요합니다. 다음 명령어를 사용해 설치합니다:

bash
pip install transformers torch

2. GPT 모델 다운로드

Hugging Face에서 제공하는 GPT-2 모델을 예시로 사용하겠습니다. Hugging Face는 다양한 대규모 언어 모델을 제공하며, 여기서 원하는 GPT 모델을 선택할 수 있습니다.

python

from transformers import GPT2Tokenizer, GPT2LMHeadModel

# GPT-2 모델과 토크나이저 로드
tokenizer = GPT2Tokenizer.from_pretrained(“gpt2”)
model = GPT2LMHeadModel.from_pretrained(“gpt2”)

이 코드를 실행하면 GPT-2 모델이 로컬 시스템에 다운로드됩니다. 이 모델을 로컬 디렉토리에 저장하여 BitNet CPP에서 사용할 수 있습니다.

2.1 GPT 모델을 로컬에 저장

모델을 로컬 디렉토리에 저장하려면 Hugging Face의 save_pretrained() 메서드를 사용합니다.

python
# GPT-2 모델을 로컬 디렉토리에 저장
model.save_pretrained("./gpt2_model")
tokenizer.save_pretrained("./gpt2_model")

이 코드를 실행하면 ./gpt2_model 디렉토리에 모델이 저장됩니다. 이제 이 모델을 BitNet CPP와 연동하여 사용할 수 있습니다.

3. BitNet CPP에서 GPT 모델 실행

BitNet CPP 위에 GPT 모델을 실행하려면 BitNet CPP에서 모델을 로드하고 CPU 기반으로 추론을 수행할 수 있어야 합니다.

3.1 GPT 모델을 BitNet CPP에서 로드

BitNet CPP의 Python 인터페이스를 통해 GPT 모델을 로드하고 추론을 수행할 수 있습니다. Hugging Face에서 다운로드한 모델을 BitNet CPP로 불러오고 추론을 실행하는 방법은 다음과 같습니다.

python

import bitnet

# BitNet CPP에서 GPT-2 모델 로드
model = bitnet.load_model(‘./gpt2_model’)

# 사용자 입력 텍스트
input_text = “Explain the significance of machine learning.”

# GPT 모델을 사용한 추론 수행
output = model.infer(input_text)

# 추론 결과 출력
print(output)

위 코드에서 BitNet CPP는 로컬에 저장된 GPT 모델을 사용하여 CPU 기반으로 추론을 수행합니다.

3.2 실시간 추론

BitNet CPP는 CPU만을 사용하여도 실시간 추론을 수행할 수 있습니다. 이를 통해, 실시간 대화형 AI 시스템 또는 챗봇 등을 만들 수 있습니다.

python
# 실시간 대화형 GPT 모델
while True:
user_input = input("You: ")
output = model.infer(user_input)
print(f"GPT: {output}")

4. 양자화된 GPT 모델 사용

BitNet CPP는 양자화된 모델을 지원하여, 더 적은 메모리와 자원으로 GPT 모델을 실행할 수 있습니다. 양자화된 모델은 CPU에서 더 효율적으로 실행할 수 있으며, 메모리 사용량을 크게 줄일 수 있습니다.

4.1 양자화된 GPT 모델 로드

양자화된 GPT 모델을 로드하고 실행하는 방법은 일반 모델과 거의 동일합니다. Hugging Face에서는 양자화된 GPT 모델을 지원하며, 이 모델을 로드하여 BitNet CPP와 함께 사용할 수 있습니다.

python

from transformers import GPT2Tokenizer, GPT2LMHeadModel

# 양자화된 GPT-2 모델과 토크나이저 로드
tokenizer = GPT2Tokenizer.from_pretrained(“gpt2”)
model = GPT2LMHeadModel.from_pretrained(“gpt2”, torch_dtype=torch.float16) # 16비트 양자화

4.2 양자화된 GPT 모델 추론

양자화된 모델을 사용하면 메모리 절약이 가능하며, BitNet CPP의 성능을 최대로 활용할 수 있습니다. 이를 통해 에지 컴퓨팅 환경이나 메모리 자원이 제한된 시스템에서도 GPT 모델을 효율적으로 실행할 수 있습니다.

python
# 양자화된 모델을 사용한 추론
output = model.infer("What are the key applications of AI?")
print(output)

5. BitNet CPP 기반의 GPT 모델 응용 프로그램

GPT 모델을 BitNet CPP 위에서 실행하여 다양한 AI 응용 프로그램을 구축할 수 있습니다. 다음은 GPT 모델을 활용한 몇 가지 응용 프로그램입니다.

5.1 AI 챗봇

GPT 모델을 사용하여 로컬 환경에서 실시간으로 동작하는 AI 챗봇을 구축할 수 있습니다. 이 챗봇은 BitNet CPP의 CPU 기반 성능을 활용하여 고성능 GPU 없이도 빠르고 효율적으로 응답을 생성할 수 있습니다.

python
while True:
user_input = input("You: ")
output = model.infer(user_input)
print(f"GPT: {output}")

5.2 문서 생성 및 요약

GPT 모델을 사용하여 자동 문서 생성, 텍스트 요약, 글쓰기 보조 등의 작업을 수행할 수 있습니다.

python
input_text = "Artificial Intelligence is transforming industries by automating tasks and analyzing data at scale."
summary = model.infer(f"Summarize this text: {input_text}")
print(f"Summary: {summary}")

5.3 실시간 번역 시스템

GPT 모델을 기반으로 실시간 번역 시스템을 구축할 수 있습니다. 사용자 입력을 실시간으로 번역하는 시스템을 BitNet CPP에서 구동할 수 있습니다.

python
input_text = "Translate this sentence into French: Hello, how are you?"
translation = model.infer(input_text)
print(f"Translation: {translation}")

결론

BitNet CPP 위에 GPT 모델을 설치하고 사용하는 과정은 다음과 같습니다:

  1. GPT 모델 다운로드: Hugging Face의 GPT 모델을 다운로드하여 로컬에 저장.
  2. BitNet CPP에서 모델 로드: GPT 모델을 BitNet CPP와 연동하여 CPU 기반 추론을 수행.
  3. 양자화된 모델 사용: 양자화된 GPT 모델을 사용해 메모리 절약 및 성능 최적화.
  4. GPT 기반 응용 프로그램 구축: AI 챗봇, 문서 생성, 실시간 번역 시스템 등 다양한 응용 프로그램에서 활용.

WEB 서비스도 가능합니다. 

BitNet CPP 기반의 GPT 모델을 웹기반으로 서비스하기 위해 몇 가지 방법이 있습니다. 여기에 필요한 기술 스택과 접근 방식을 간략하게 설명드리겠습니다:

1. 웹 서버 설정

웹기반 서비스를 제공하기 위해서는 웹 서버가 필요합니다. 일반적으로 Python 기반의 Flask 또는 FastAPI 같은 경량 프레임워크를 사용하여 API 서버를 구축할 수 있습니다. 이 서버는 사용자의 요청을 받고 GPT 모델을 호출하여 결과를 반환하는 역할을 합니다.

2. API 구축

Flask나 FastAPI를 사용하여 REST API를 구축합니다. 이 API를 통해 사용자는 웹 브라우저나 다른 클라이언트 애플리케이션을 통해 모델에 질문을 보내고 응답을 받을 수 있습니다.

예시 코드 (Flask를 사용하는 경우):

python

from flask import Flask, request, jsonify
from model import GPTModel # GPT 모델 로드를 위한 가상의 모듈

app = Flask(__name__)
model = GPTModel()

@app.route(‘/infer’, methods=[‘POST’])
def infer():
user_input = request.json.get(‘text’)
output = model.infer(user_input)
return jsonify({‘response’: output})

if __name__ == ‘__main__’:
app.run(debug=True, host=‘0.0.0.0’, port=5000)

3. 웹 인터페이스

사용자가 웹 브라우저를 통해 서비스를 이용할 수 있도록 HTML, CSS, JavaScript를 사용하여 사용자 인터페이스를 구축할 수 있습니다. 이 인터페이스는 API와 통신하여 사용자의 요청을 서버로 전송하고, 서버로부터 받은 응답을 표시합니다.

예시 HTML과 JavaScript:

html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>GPT Chatbot</title>
</head>
<body>
<input type="text" id="userInput" placeholder="Type your message...">
<button onclick="sendInput()">Send</button>
<p id="response"></p>

<script>
function sendInput() {
const userInput = document.getElementById(‘userInput’).value;
fetch(‘/infer’, {
method: ‘POST’,
headers: {
‘Content-Type’: ‘application/json’,
},
body: JSON.stringify({text: userInput})
})
.then(response => response.json())
.then(data => {
document.getElementById(‘response’).innerText = “GPT: “ + data.response;
})
.catch(error => console.error(‘Error:’, error));
}
</script>
</body>
</html>

4. 배포

개발한 웹 애플리케이션을 인터넷에 공개하기 위해 AWS, Google Cloud, Heroku와 같은 클라우드 서비스에 배포할 수 있습니다. 이러한 플랫폼은 서버를 쉽게 관리하고 스케일 업할 수 있는 옵션을 제공합니다. 또한 자신의 개인 PC이긴 하지만 고정 IP를 신청하고 위에 설치한 리눅스에 고정 IP를 설정한 뒤에 도메인 회사(가비아 등등)에서 그 IP로 DNS를 설정해주면 글로벌 웹서버로서 실제 서비스가 가능합니다. 

우리는 위 단계들을 통해 BitNet CPP 기반의 GPT 모델을 활용한 웹기반 서비스를 구축하고 운영할 수 있게 되었습니다.

© 2023 나의 웹 페이지