llama-cpp-python 설치하기

total\Scripts\activate #가상환경 활성화
$cmakeArgs = @(
    '-DGGML_CUDA=ON',
    '-DLLAMA_CURL=ON',
    '-DCMAKE_GENERATOR_TOOLSET="cuda=C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v12.4"',
    '-DCMAKE_CUDA_ARCHITECTURES="86;89"',
    '-DCMAKE_TOOLCHAIN_FILE=A:/vcpkg/scripts/buildsystems/vcpkg.cmake',
    '-DCURL_INCLUDE_DIR=A:/vcpkg/packages/curl_x64-windows/include',
    '-DCURL_LIBRARY=A:/vcpkg/packages/curl_x64-windows/lib/libcurl.lib'
)

$cmakeArgsString = $cmakeArgs -join ' '
 $env:CMAKE_ARGS = $cmakeArgsString
pip install llama-cpp-python --no-cache-dir

그럼 다음과 같이 설치가 진행되게 된다.

다른 패키지와도 충돌이 나지 않는 안정적인 모습~!

# llama-cpp-python 채팅 프로그램 예제
# 세계 최정상 프로그래머의 해법: 간단한 루프 기반 채팅, GPU 가속, 오류 처리 포함
import sys
from llama_cpp import Llama

# 모델 경로 설정 (사용자 환경에 맞게 수정)
MODEL_PATH = "llama-3-Korean-Bllossom-8B-Q4_K_M.gguf"  # 다운로드한 파일 경로

# 모델 로드 (CUDA 지원: n_gpu_layers=-1로 모든 레이어 GPU 사용, 컨텍스트 크기 2048로 설정)
try:
    llm = Llama(
        model_path=MODEL_PATH,
        n_gpu_layers=-1,  # GPU 가속: -1=모든 레이어 GPU, 0=CPU만
        n_ctx=2048,       # 컨텍스트 길이: 대화 길이에 따라 증가 가능 (메모리 주의)
        verbose=True      # 로깅 활성화: 디버깅에 유용
    )
    print("모델 로드 완료! 채팅을 시작하세요. (종료: 'exit' 입력)")
except Exception as e:
    print(f"모델 로드 실패: {e}")
    sys.exit(1)

# 채팅 히스토리 (시스템 프롬프트로 한국어 특화 모델 초기화)
chat_history = [
    {"role": "system", "content": "너는 도움이 되는 AI 어시스턴트야. 한국어로 자연스럽게 대답해."}
]

# 무한 루프 채팅 (프로 팁: 히스토리 유지로 컨텍스트 보존)
while True:
    user_input = input("사용자: ")
    if user_input.lower() == "exit":
        print("채팅 종료!")
        break
    
    # 히스토리에 사용자 입력 추가
    chat_history.append({"role": "user", "content": user_input})
    
    # 모델 쿼리 (스트리밍 응답: 실시간 출력)
    try:
        response = llm.create_chat_completion(
            messages=chat_history,
            stream=True,  # 스트리밍: 응답을 chunk로 받아 실시간 출력
            max_tokens=512,  # 최대 토큰: 응답 길이 제한 (메모리 절약)
            temperature=0.7,  # 창의성: 0.7=균형, 낮추면 더 사실적
            top_p=0.9         # 다양성: 0.9=다양, 낮추면 더 집중
        )
        
        print("AI: ", end="", flush=True)
        ai_response = ""
        for chunk in response:
            content = chunk['choices'][0]['delta'].get('content', "")
            print(content, end="", flush=True)
            ai_response += content
        print()  # 줄바꿈
        
        # 히스토리에 AI 응답 추가 (다음 쿼리 컨텍스트 유지)
        chat_history.append({"role": "assistant", "content": ai_response})
    except Exception as e:
        print(f"쿼리 오류: {e}")

와 같은 코드를 실행하게 되면

사용자: 노래 하나 작사해줘. 주제는 ‘콜라’에 대해서
AI: (제목: 콜라의 노래)

[verse 1]
어느 날, 손에 닿는 순간
콜라의 냄새가 나에게 다가온다
푸르름한 색과 깊은 맛
그 순간, 모든 스트레스가 사라져

[chorus]
콜라, 콜라, 나에게 오는 그 날
콜라, 콜라, 내 마음을 다스리는 그 맛
콜라, 콜라, 언제나 나의 곁에
콜라, 콜라, 내 일상을 밝게 비추는 그 빛

[verse 2]
하루종일의 피로, 그 모든 것이
콜라의 한 잔 속에 녹아들어
따스한 날씨의 여름, 혹은
추운 겨울의 밤에도 그 맛이 변함없이 그대로

[chorus]
콜라, 콜라, 나에게 오는 그 날
콜라, 콜라, 내 마음을 다스리는 그 맛
콜라, 콜라, 언제나 나의 곁에
콜라, 콜라, 내 일상을 밝게 비추는 그 빛

[bridge]
언제나 함께, 콜라와 나
그가 나에게, 그 나에게
콜라와 나, 그들은 우리
언제나 함께, 그들의 맛

[chorus]
콜라, 콜라, 나에게 오는 그 날
콜라, 콜라, 내 마음을 다스리는 그 맛
콜라, 콜라, 언제나 나의 곁에
콜라, 콜라, 내 일상을 밝게 비추는 그 빛

[outro]
콜라, 그 맛이 우리를
이제, 이제 그 날을
콜라, 그 맛이 우리를
이제, 이제 그 날을