로컬 LLM 셋업 가이드 (v23)

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • MyrinNew
    Senior Member
    • Feb 2024
    • 5168

    #1

    로컬 LLM 셋업 가이드 (v23)

    로컬 LLM 셋업 가이드 (v23)

    1. 개요 및 사전 준비

    로컬 LLM(대형 언어 모델)을 실행하는 것은 비용 효율적인 방법으로 AI 기능을 통합할 수 있는 가장 간단한 접근 방식입니다. 이 가이드는 Linux 기반 시스템에서 로컬 LLM을 설정하고 최적화하는 실용적인 방법을 제공합니다.


    사전 요구사항

    • 운영 체제: Ubuntu 20.04 이상 또는 Debian 11 이상
    • 하드웨어:
      • GPU: NVIDIA RTX 30xx 이상 (최소 8GB VRAM)
      • CPU: 최소 8코어
      • RAM: 최소 32GB (64GB 이상 권장)
      • 저장소: 최소 100GB 여유 공간


    시스템 확인





    # GPU 확인
    nvidia-smi

    # RAM 확인
    free -h

    # CPU 확인
    lscpu







    2. 프레임워크 비교

    llama.cpp 빠른 설치, 최적화된 C++ 구현, 최소 의존성 API 서버 미포함 단일 모델 실행
    Ollama 쉬운 설치, 간단한 API, 이미지 기반 배포 메모리 사용량 높음 개발/테스트 환경
    vLLM 최고의 성능, 대규모 토크나이즈 처리 복잡한 설치 과정 프로덕션 환경
    LocalAI 다양한 API 호환성, 클라우드 연계 기술 지원 제한 API 기반 어플리케이션


    3. 추천 설정 - llama.cpp 설치

    llama.cpp는 가장 적절한 선택입니다. 간단하고 빠르며 최적화된 성능을 제공합니다.






    # 설치 전 준비
    sudo apt update
    sudo apt install build-essential git -y

    # llama.cpp 다운로드 및 컴파일
    git clone https://github.com/ggerganov/llama.cpp.git
    cd llama.cpp

    # 컴파일
    make clean
    make

    # 필수 라이브러리 설치 (필요시)
    pip install torch numpy

    # 모델 다운로드 (예시: LLaMA-2 7B)
    mkdir -p models
    wget https://huggingface.co/llamav2-7b/re...lama-2-7b.gguf -O models/llama-2-7b.gguf







    4. 모델 선택 가이드

    일반 텍스트 생성 LLaMA-2 7B (Q5_K_M) 균형 잡힌 성능과 정확도
    빠른 추론 Mistral 7B (Q4_K_M) 빠른 추론 속도
    고정밀도 Phi-3 3.8B (Q4_K_M) 정밀한 답변
    코드 생성 CodeLLaMA 7B (Q4_K_M) 프로그래밍 관련 작업


    5. 양자화 유형 설명





    # 양자화 유형별 설명
    # Q4_K_M: 최적화된 4비트 양자화, 높은 성능/정확도 비율
    # Q5_K_M: 5비트 양자화, 정확도 향상
    # Q6_K: 6비트, 최고 정확도
    # Q8_0: 8비트, 최대 정확도







    실제 모델 변환 예시





    # Q5_K_M 양자화
    ./convert-hf-to-gguf.py models/llama-2-7b/ --outtype q5_k_m --outfile models/llama-2-7b-q5k.gguf

    # Q4_K_M 양자화
    ./convert-hf-to-gguf.py models/llama-2-7b/ --outtype q4_k_m --outfile models/llama-2-7b-q4k.gguf







    6. API 설정 및 도구 통합





    # llama.cpp API 서버 시작
    ./server -m models/llama-2-7b-q5k.gguf -c 2048 --host 0.0.0.0 --port 8080

    # API 테스트
    curl http://localhost:8080/completion \
    -H "Content-Type: application/json" \
    -d '{
    "prompt": "Hello, how are you?",
    "n_predict": 128,
    "temperature": 0.7
    }'







    외부 도구 통합 예시 (Python)





    import requests

    def llama_completion(prompt, max_tokens=128, temperature=0.7):
    response = requests.post(
    "http://localhost:8080/completion",
    json={
    "prompt": prompt,
    "n_predict": max_tokens,
    "temperature": temperature
    }
    )
    return response.json()['content']

    # 사용 예시
    result = llama_completion("Python에서 JSON 파싱 방법은?")
    print(result)







    7. Systemd 서비스 설정

    24시간 실행을 위해 systemd 서비스를 설정합니다.






    # 서비스 파일 생성
    sudo nano /etc/systemd/system/llama.service

    # 서비스 내용
    [Unit]
    Description=Local LLM Server
    After=network.target

    [Service]
    Type=simple
    User=your_user
    WorkingDirectory=/home/your_user/llama.cpp
    ExecStart=/home/your_user/llama.cpp/server -m /home/your_user/llama.cpp/models/llama-2-7b-q5k.gguf -c 2048 --host 0.0.0.0 --port 8080
    Restart=always
    RestartSec=10

    [Install]
    WantedBy=multi-user.target

    # 서비스 활성화
    sudo systemctl daemon-reload
    sudo systemctl enable llama.service
    sudo systemctl start llama.service







    8. 모니터링 및 성능 최적화

    성능 모니터링 스크립트





    # 성능 모니터링 스크립트 (monitor.sh)
    #!/bin/bash
    while true; do
    echo "=== Memory Usage ==="
    free -h
    echo "=== GPU Usage ==="
    nvidia-smi
    echo "=== CPU Load ==="
    top -bn1 | grep "Cpu(s)"
    sleep 30
    done







    최적화 옵션





    # 빠른 추론 (적은 메모리 사용)
    ./server -m models/llama-2-7b-q5k.gguf -c 512 -n 128

    # 최대 성능 (높은 메모리 사용)
    ./server -m models/llama-2-7b-q5k.gguf -c 2048 -n 2048 --threads 8

    # GPU 메모리 최적화
    ./server -m models/llama-2-7b-q5k.gguf --gpu-layers 30 -c 1024







    9. 실제 성능 벤치마크

    추론 성능 테스트





    # 성능 테스트
    ./server -m models/llama-2-7b-q5k.gguf -c 2048 --port 8081

    # 빠른 테스트
    ab -n 10 -c 5 http://localhost:8081/completion

    # 실제 요청 테스트
    curl -X POST http://localhost:8080/completion \
    -H "Content-Type: application/json" \
    -d '{"prompt": "The capital of France is", "n_predict": 10}' \
    -w "%{time_total}s\n"







    추론 시간 기록 (예시)





    LLaMA-2 7B (Q5_K_M):
    - 문맥 길이 512: 0.8초
    - 문맥 길이 1024: 1.2초
    - 문맥 길이 2048: 2.1초

    Mistral 7B (Q4_K_M):
    - 문맥 길이 512: 0.5초
    - 문맥 길이 1024: 0.9초
    - 문맥 길이 2048: 1.6초







    10. 실전 사용 사례




    📥 Get the full guide on Gumroad: https://gumroad.com/l/auto ($7)




    More...
Working...