RWKV 로컬 추론을 위한 Ai00 Server 구축 및 파라미터 최적화

Ai00 Server 개요 및 아키텍처

Ai00 Server는 web-rwkv 추론 엔진을 기반으로 구축된 RWKV 언어 모델용 API 서버입니다. MIT 라이선스를 따르는 오픈소스 프로젝트로, 무거운 PyTorch나 CUDA 런타임 환경 없이도 독립적으로 실행됩니다. Vulkan을 백엔드로 활용하여 NVIDIA, AMD, Intel의 다양한 GPU(내장 그래픽 포함)에서 병렬 및 배치 추론을 지원합니다. 또한 INT8 및 NF4 양자화를 지원하여 일반적인 개인용 PC에서도 높은 성능의 로컬 LLM 환경을 구축할 수 있습니다.

설치 및 모델 준비

1. 실행 파일 다운로드

공식 GitHub 릴리스 페이지에서 최신 빌드 아카이브를 다운로드하고 압축을 해제합니다. 별도의 복잡한 환경 설정 없이 바이너리 파일만으로 구동됩니다.

2. Safetensors(.st) 모델 확보

이 서버는 .st 확장자를 가진 Safetensors 포맷만 인식합니다. 두 가지 방식으로 모델을 준비할 수 있습니다.

  • 사전 변환된 모델 사용: Hugging Face의 커뮤니티 허브에서 이미 .st로 변환된 RWKV-5 또는 RWKV-6 가중치를 다운로드합니다.
  • 직접 변환: 공식 .pth 가중치를 다운로드한 후 동봉된 변환 유틸리티를 사용합니다.

변환 유틸리티 사용 예시:

# 원본 pth 파일을 st 포맷으로 변환
./converter --input ./raw_weights/rwkv_v6_world.pth

변환이 완료된 .st 파일은 프로젝트 루트의 assets/models/ 디렉토리로 이동시킵니다.

Config.toml 설정 및 서버 구동

서버의 동작 방식은 assets/configs/Config.toml 파일에 정의됩니다. 하드웨어 사양과 요구사항에 맞게 주요 파라미터를 조정합니다.

[model]
embed_device = "Gpu"                                 # 임베딩 행렬 연산 장치 ("Cpu" 또는 "Gpu")
max_batch = 16                                       # GPU에 캐싱할 최대 배치 크기
name = "RWKV-x060-World-7B-v2.1-20240501-ctx4096.st" # 불러올 모델 파일명
path = "assets/models"                               # 모델 가중치 디렉토리
precision = "Fp16"                                   # 중간 텐서 정밀도 ("Fp16" 또는 "Fp32")
quant = 4                                            # 양자화 적용 레이어 수 (메모리 절감, 28 이하 권장)
quant_type = "NF4"                                   # 양자화 방식 ("Int8" 또는 "NF4")
stop = ["\n\n", "User:"]                             # 생성 중단 토큰 목록
token_chunk_size = 64                                # 병렬 토큰 청크 크기 (32~128, VRAM에 비례하여 증가)

[[state]]
name = "korean-qa-enhanced"
path = "rwkv-x060-ko_single_round_qa-7B-20240510-ctx2048.state"

[tokenizer]
path = "assets/tokenizer/rwkv_vocab_v20230424.json"

[adapter]
Auto = {}

[listen]
ip = "127.0.0.1"
port = 8080
tls = false

[[listen.app_keys]]
app_id = "LOCAL_RWKV_APP"
secret_key = "SUPER_SECRET_LOCAL_KEY"

[web]
path = "assets/www/index.zip"

설정을 저장한 후 실행 파일을 구동합니다. 터미널에 모델 리로드 완료 로그가 출력되면, 브라우저에서 http://127.0.0.1:8080으로 접속하여 WebUI를 사용할 수 있습니다.

디코딩 파라미터 튜닝

WebUI 우측 패널에서 샘플링 파라미터를 조절하여 생성물의 특성을 제어할 수 있습니다.

파라미터 동작 원리 및 효과
Temperature 확률 분포의 예리함을 조절합니다. 값이 클수록 다양하고 창의적인 출력이 나오며, 작을수록 확정적이고 안정적인 결과를 보입니다.
Top_P 누적 확률 질량이 P가 되는 최소한의 단어 집합에서만 샘플링합니다. 값을 낮추면 논리적 일관성이 높아집니다.
Presence Penalty 이미 등장한 토큰에 페널티를 부여하여 새로운 주제나 단어로 대화를 확장하도록 유도합니다.
Frequency Penalty 등장 빈도에 비례하여 페널티를 부과해 동일한 문구나 단어의 반복을 억제합니다.

시나리오별 추천 설정

  • 창의적 글쓰기 (소설, 스토리텔링): Temperature: 1.4, Top_P: 0.3 (다양한 어휘 사용과 적절한 논리 유지)
  • 구조화된 작업 (요약, 정보 추출): Temperature: 1.0, Top_P: 0.1, Penalties: 0 (정확하고 일관된 출력 보장)

고급 기능 활용

State 파일 마운팅

State 파일은 모델의 초기 은닉 상태를 조작하여 특정 도메인이나 화풍에 적응시킵니다. Config.toml[[state]] 섹션에서 주석을 해제하고 경로를 지정하면 활성화됩니다. 주의할 점은 State 파일이 학습된 베이스 모델의 버전 및 파라미터 크기와 정확히 일치해야 한다는 것입니다.

LoRA 어댑터 적용

파인튜닝된 LoRA 가중치를 결합하여 특정 작업의 성능을 극대화할 수 있습니다. [[lora]] 블록을 활성화하고 path를 설정합니다. 다중 LoRA 로딩을 지원하지만, 런타임 중 동적 언로딩은 제한될 수 있어 서버 재시작이 필요할 수 있습니다.

BNF (Backus-Naur Form) 기반 포맷 강제

LLM이 반드시 특정 구조(예: JSON, XML)로 응답해야 할 때 BNF 스키마를 주입합니다. 아래는 사용자 정보를 추출하기 위한 BNF 규칙 예시입니다.

<start> ::= <user_data>
<user_data> ::= "{" <fields> "}"
<fields> ::= <field> | <field> ", " <fields>
<field> ::= <key> ": " <value>
<key> ::= '"user_id"' | '"role"' | '"status"'
<value> ::= <string> | <integer>
<string> ::= '"' <chars> '"'
<chars> ::= <char> | <char> <chars>
<char> ::= "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z"
<integer> ::= <digit> | <digit> <integer>
<digit> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"

Prefab 포맷으로 양자화 모델 내보내기

WebUI의 설정 메뉴에서 현재 로드된 모델을 Prefab 형식으로 익스포트할 수 있습니다. 이는 게임 엔진의 에셋 파이프라인에 RWKV 모델을 직접 통합하여 NPC 대화 로직이나 동적 이벤트 생성에 활용할 수 있게 해줍니다.

트러블슈팅

  • WebUI 접속 불가: Config.toml에서 tls = false로 설정했다면 HTTPS가 아닌 HTTP 프로토콜로 접속해야 합니다.
  • Vulkan 어댑터 요청 실패: 시스템에 최신 Vulkan 호환 그래픽 드라이버가 설치되어 있는지 확인하십시오. 클라우드 GPU 환경 중 Vulkan을 지원하지 않는 인스턴스에서는 실행할 수 없습니다.
  • 멀티 GPU 환경에서 단일 GPU만 사용: 현재 아키텍처는 텐서 병렬화를 지원하지 않으므로, 가장 VRAM이 큰 단일 GPU를 선택하여 실행하는 것이 좋습니다.
  • 공유 메모리 사용 시 속도 저하: VRAM 부족으로 시스템 RAM을 공유 메모리로 할당하면 PCIe 대역폭 병목으로 인해 추론 속도가 급격히 하락합니다. 이는 하드웨어적 한계이므로 양자화 수준을 높여 VRAM 내에 모델을 적재해야 합니다.

태그: RWKV Ai00 Server Vulkan Safetensors LLM Inference

6월 30일 05:02에 게시됨