서론: “간단한” 채팅 프레임워크에 대한 이야기
자신을 “간단하다”고 칭하는 개발자 도구는 대개 그렇지 않다는 점이 문제입니다. 그들은 항공기 탑승이 “간단하다”고 말하는 것과 같습니다. 줄, 구역, 그리고 앱이 게이트에서 로그아웃되어 찾을 수 없는 탑승권. 사람들이 LLM에 연결하는 오픈 소스 채팅 프레임워크인 FastChat은 종종 간단하다고 불립니다. 실제로는 어떨까요? 정확히 무엇을 하고 있는지 안다면 간단합니다. 그렇지 않다면 크리스토퍼 놀란의 플롯 반전을 위해 오디션을 보는 것처럼 보이는 포트, 모델 및 GPU 수학의 얽힘입니다.
이 가이드는 주말을 디버깅 피난처처럼 취급하지 않고 FastChat을 사용하는 방법에 대한 저의 솔직한 설명입니다. FastChat을 로컬에서 사용하는 방법, 모델을 서비스하는 방법, OpenAI 호환 엔드포인트를 연결하는 방법, 그리고 현실과의 첫 만남에서 무너지지 않는 UI를 실행하는 방법을 살펴볼 것입니다. 저는 무엇이 깨지기 쉽고, 무엇이 빠르며, 무엇이 빠르다고 마케팅되는지 지적할 것입니다. (이것들은 종종 세 가지 다른 것입니다.)
FastChat, 정말 무엇일까요?
FastChat은 대규모 언어 모델을 서비스하고 채팅하기 위한 오픈 소스 시스템입니다. “OpenAI API 복제”라고 생각하되, 모델은 직접 가져와야 합니다. 다음을 포함합니다.
- 하나 이상의 모델 작업자 (실제로 작업을 수행하는 사람들),
- 아무것도 없는 것보다는 낫지만, 특별히 제작된 것보다는 못한 웹 UI.
단 한 줄의 명령어로 로컬 LLM을 실행해 본 적이 있다면: 이것이 프로덕션 준비가 되었다고는 생각할 수 없다—맞습니다. FastChat은 그 반대입니다: 프로덕션과 비슷해지기를 원합니다. LEGO Duplo보다 LEGO Technic처럼 구성 요소를 연결합니다. 그 보상은 유연성입니다. 그 대가는 무엇을 하고 있는지 아는 것입니다.
FastChat 사용법: 짧은 버전
- FastChat과 종속성 (Python, 속도를 중시한다면 CUDA, 모델 가중치)을 설치합니다.
- 최소한 하나의 모델 작업자를 시작하고 컨트롤러를 가리킵니다.
- (선택 사항이지만 유용함) OpenAI 호환 API 서버를 시작합니다.
- (선택 사항이지만 정신 건강에 도움이 됨) 웹 UI를 시작합니다.
- OpenAI 스타일 API 또는 내장 UI를 통해 요청을 보냅니다. 욕설을 멈출 때까지 반복합니다.
이것이 핵심 루프입니다. 나머지는 GPU나 인내심을 소모하지 않고 이 작업을 수행하는 방법에 대한 것입니다.
설정: 나중에 시간을 절약해 주는 지루한 부분
- Python: 오염시키지 않을 가상 환경을 사용하십시오. FastChat은 버전에 까다롭습니다. 까다로운 소프트웨어는 사과하지 않습니다.
- GPU: NVIDIA 하드웨어가 있는 경우 드라이버와 실제로 일치하는 CUDA 툴킷을 설치하십시오. 그렇지 않으면 CPU에서 실행되며, 이는 미니밴을 타고 파이크스 피크를 올라가는 것과 같습니다—가능하지만 생각보다 느리고 왜 시도했는지 궁금할 것입니다.
- 모델: FastChat은 모델과 함께 제공되지 않습니다. 모델 가중치 (Llama 변형, Mistral, Qwen 등)를 가리킵니다. GPU VRAM이 “데이터 센터”보다 “MacBook”에 가깝다면 양자화된 모델을 실행할 수도 있습니다.
기본 설치: 깨끗하게 유지하기
- pip install fastchat. CUDA 지원 PyTorch가 필요한 경우 먼저 설치하십시오. 필요한지 모른다면 아마도 필요할 것입니다.
- torch가 GPU를 인식하는지 확인하십시오: 그렇지 않다면 FastChat을 탓하기 전에 수정하십시오. 드라이버 누락에 대해 프레임워크를 탓하는 것은 겨울에 온도 조절 장치를 탓하는 것과 같은 devops 버전입니다.
컨트롤러 시작: 항공 교통 관제탑
컨트롤러를 실행합니다. 모델 작업자를 추적하고 요청을 라우팅합니다. 없으면 아무것도 아무것과도 통신하지 않습니다. 추론 팜에 대한 DNS라고 생각하십시오. 지루하고 필수적이며 작동할 때는 보이지 않습니다.
모델 작업자 시작: 마법이 실제로 일어나는 곳
- VRAM에서 감당할 수 있는 모델을 선택하십시오. FP16의 7B 파라미터 모델은 여전히 적당한 GPU를 망칠 수 있습니다. 제약이 있는 경우 4비트 또는 8비트 양자화를 시도하십시오.
- 작업자를 시작하고 컨트롤러를 가리키고 모델 경로를 설정하십시오. 로드에 실패하면 일반적으로 모델 정밀도가 맞지 않거나 토크나이저가 일치하지 않기 때문입니다. 로그를 읽으십시오. 외과 의사가 솔직한 것처럼 그들은 솔직합니다.
OpenAI 호환 API: 유용한 부분
FastChat은 OpenAI 스타일 API를 노출합니다. 즉, OpenAI 엔드포인트를 예상하는 기존 스크립트와 도구가 이론상으로는 제대로 작동할 수 있습니다. 실제로는 기본 URL을 조정하고 작업자가 지원하지 않는 기능 (함수 호출, 이미지 입력)을 조심해야 합니다. 그러나 사물의 모양 (JSON, 채팅/완료 엔드포인트)이 일치합니다. 그것이 주말 프로젝트와 서비스에 연결할 수 있는 것의 차이점입니다.
웹 UI: 클릭하고 싶을 때도 있기 때문에
내장 UI는 테스트에 적합합니다. 제품이 아니라 창입니다. 두뇌-인-어-박스에 대한 개발 콘솔만 원한다면 이것으로 충분합니다. 작업 공간, 스레드, 멀티모달 입력 또는 사려 깊은 삶의 질 기능을 원한다면 여전히 자체 래퍼를 작성하거나 이미 에지 케이스를 파악한 클라이언트를 사용하게 될 것입니다.
로컬 개발을 위해 FastChat을 사용하는 방법
- 별도의 터미널에서 컨트롤러와 작업자를 스핀업하십시오. 신뢰할 때까지 tmux에 묻지 마십시오.
- curl 또는 작은 Python 스크립트를 사용하여 OpenAI 호환 엔드포인트를 호출하십시오: 짧고 명확한 테스트 프롬프트를 보내십시오.
- 생성 매개변수를 다이얼 인하십시오: 온도, top_p, max_tokens. 보수적으로 시작하십시오. 사람들은 무작위성을 과도하게 조정하고 모델이 장난스럽게 일어난 것처럼 환각에 대해 불평합니다.
- 토큰화 동작이 예상과 일치하는지 확인하십시오. 모델을 자주 교체하는 경우 에지 케이스를 찾을 수 있습니다. 그것은 FastChat의 잘못이 아닙니다. 그것은 “LLM은 이상하다”입니다.
팀 프로토타입 제작을 위해 FastChat을 사용하는 방법
- 풀을 시뮬레이션하기 위해 동일한 모델로 여러 작업자를 실행하거나 기능별로 모델을 혼합하십시오.
- OpenAI 호환 엔드포인트를 내부적으로 노출하십시오. 팀에 단일 URL과 API 키를 제공하십시오.
- 로깅을 추가하십시오. 새로운 아이디어는 아니지만, 맹목적으로 실행되는 팀의 수는 라스베가스 스포츠 북을 붉게 물들일 것입니다. 디버깅을 위해 프롬프트와 응답이 필요합니다. 필요한 경우 민감한 부분을 수정하십시오.
성능: “빠르다”는 의미는 당신에게 달려 있습니다.
FastChat은 빠르거나 과도한 야망 구성으로 자신을 교수형에 처할 수 있을 만큼 충분한 로프를 제공합니다. 현실 점검:
- VRAM: 충분하지 않으면 양자화하십시오. 그래도 충분하지 않으면 더 작은 모델을 사용하십시오. 프레임워크는 물리학을 수정하지 않습니다.
- 배치 크기: 처리량에는 좋지만 대기 시간에는 종종 나쁩니다. 하나를 선택하십시오. 둘 다 필요한 경우 더 많은 작업자가 필요합니다.
- KV 캐시: 작업자가 지원하는 경우 재사용하십시오. 그렇지 않으면 이미 지불한 컨텍스트에 대해 비용을 지불하고 있습니다.
- 토큰 샘플링: 기본 모델 품질이 제한 요소가 되면 멋진 디코딩 방식은 수확 체감이 발생합니다.
보안: 장난감이 아닙니다.
FastChat을 다른 사람이 만질 수 있는 서버에 배치하는 경우:
- 인증을 추가하십시오. 조잡한 API 키조차도 “희망”보다 낫습니다.
- 속도 제한. 스크립트가 새벽 2시에 재귀적으로 실행될 때 미래의 당신이 감사할 것입니다.
- 라이선스가 있는 가중치를 오픈 가중치와 혼합하는 경우 공개 및 비공개 모델 간에 트래픽을 분할하십시오. 변호사는 모호성을 좋아합니다. 그들에게 먹이를 주지 마십시오.
실제 도구와 함께 FastChat을 사용하는 방법
- 노트북: OpenAI 클라이언트를 FastChat 기본 URL로 가리키고 시작하십시오. 데이터 과학자에게 가장 덜 성가신 경로입니다.
- CLI: 스모크 테스트를 위해 작은 스크립트를 편리하게 유지하십시오. 10초 안에 합리적인 응답을 얻을 수 없다면 중지하고 파이프라인을 수정하십시오.
- 웹 앱: FastChat을 내부 마이크로 서비스처럼 취급하십시오. 상태 확인, 재시도, 시간 초과. 이를 수행하기 위해 책이 필요한 것이 아니라 규율이 필요합니다.
모델 선택: 모두가 논쟁하는 부분
책임감 있게 FastChat을 사용하는 방법은 모델 선택에서 시작됩니다. 몇 가지 빠른 휴리스틱:
- 명확한 답변이 있는 짧은 형식의 채팅: 더 작은 지침 조정 모델은 종종 무게 이상을 발휘합니다.
- 코드 중심 프롬프트: 허용 라이선스로 코드에서 실제로 훈련된 모델을 사용하십시오. “거의 충분함”은 아닙니다.
- 긴 컨텍스트: 32K+ 토큰이 필요한 경우 먼저 하드웨어를 계획하십시오. 그런 다음 기대치를 낮추십시오.
- 멀티모달: FastChat의 호환성은 다양합니다. 이미지나 오디오가 필요한 경우 명시적으로 지원하는 작업자와 모델을 선택하거나 그렇게하는 척하지 마십시오.
OpenAI 호환성 함정
OpenAI 호환 API의 좋은 점은 백엔드를 교체할 수 있다는 것입니다. 좋지 않은 점은 사람들이 모든 모델을 동일하게 취급하기 시작한다는 것입니다. 그렇지 않습니다. 동일하게 보이는 엔드포인트는 모델에 따라 추론, 장황함, 안전 필터, 전체 성격 등 매우 다르게 작동할 수 있습니다. JSON 스키마가 일치한다고 해서 앱이 마법처럼 적응하지 않습니다. 실행할 실제 모델로 테스트하십시오. 그런 다음 변경 후 다시 테스트하십시오.
관찰 가능성: 볼 수 없는 것은 수정할 수 없습니다.
- 프롬프트, 매개변수 및 대기 시간을 기록하십시오.
- 토큰 수를 추적하고 예산을 초과하는 프롬프트를 거부하십시오.
- 모델별 대시보드를 유지하십시오. 예, 이것은 “채팅 서버”에 대한 많은 것입니다. 또한 안정성과 분위기의 차이입니다.
실패 모드: FastChat이 다시 물어뜯는 곳
- 작업자가 OOM에서 죽음: 정밀도를 너무 높게 추측했습니다. 낮추거나 더 많은 VRAM이 있는 GPU를 얻으십시오. 마법의 양이 FP16 13B를 8GB로 안정적으로 압착하지 않습니다.
- 컨트롤러가 작업자를 추적하지 못함: 네트워킹 문제. 재시도를 추가하고 커피숍 LAN 파티에 있는 것처럼 동일한 불안정한 Wi‑Fi에 모든 것을 배포하지 마십시오.
- 끔찍한 대기 시간 스파이크: 배치가 너무 야심적이거나 CPU가 토큰화를 병목 현상으로 만듭니다. 이론화하기 전에 프로파일링하십시오.
일주일을 잃지 않고 RAG에 FastChat을 사용하는 방법
사람들은 FastChat을 검색 파이프라인에 연결하고 모델이 인용하는 대신 리프를 연주할 때 놀라는 척합니다. 팁:
- 다른 곳에서 검색을 깨끗하게 수행 (벡터 DB, 임베딩)하고 모델에 짧고 구조화된 컨텍스트를 제공하십시오.
- 프롬프트를 훈련하십시오. “인용문으로 답변하십시오”는 주문이 아니라 제안입니다. 인용문이 필요한 경우 후처리에서 구조를 적용하거나 작동하도록 훈련된 모델을 사용하십시오.
- 반복적인 쿼리에 대한 답변을 캐시하십시오. 대부분의 “동적” 지식 기반은 다른 각도에서 동일한 6가지 질문의 80%입니다.
비용: 시간은 비싼 부분입니다.
FastChat을 로컬에서 실행하는 것은 서류상으로는 저렴하고 관심사면에서는 비쌉니다. 목표가 배우는 것이라면 좋습니다. 목표가 배송하는 것이라면 포장, 업그레이드, 모니터링, 폴백 등 시간이 어디로 가는지 고려하십시오. 실제로 판단되는 작업이 “채팅 서버를 실행했다”가 아니면 관리 서비스를 사용하는 데 수치심을 느낄 필요가 없습니다.
건전한 클라이언트 경험 (스레드, 프롬프트 관리, 로컬 및 클라우드 모델 간의 빠른 전환)을 원한다면 Sider.AI는 먼저 세 개의 YAML 파일을 읽어달라고 애원하지 않고도 실제로 작동합니다. OpenAI 호환 엔드포인트 (예: FastChat)를 가리키거나 GPU가 쌕쌕거리기 시작할 때 호스팅된 모델을 사용할 수 있습니다. FastChat의 대체품이 아니라 개발자가 옆에 서서 설명하지 않아도 사람들이 사용할 수 있는 것으로 거친 모서리를 바꾸는 부분입니다. 작업자와 컨트롤러를 만지작거리는 것이 우선 순위라면 FastChat에 머물러 있으십시오. 실제 작업을 수행하는 경우 FastChat 엔드포인트 위에 있는 Sider는 후회하지 않을 부분입니다. FastChat을 단계별로 사용하는 방법 (손 흔들기 없이)
- 종속성 설치: Python, 해당되는 경우 CUDA, CUDA가 있는 PyTorch.
- 예측 가능한 포트에서 컨트롤러를 시작하십시오.
- 실제로 실행할 수 있는 모델을 다운로드하십시오. 10대가 첫 차를 선택하는 것처럼 리더 보드에서 가장 큰 것으로 시작하지 마십시오.
- 해당 모델로 작업자를 시작하십시오. VRAM 사용량과 첫 번째 토큰을 확인하십시오.
- OpenAI 호환 API 서버를 시작하십시오.
- 로컬 기본 URL로 설정된 OpenAI 클라이언트를 사용하여 알려진 양호한 프롬프트로 테스트하십시오.
- 디코딩 매개변수를 조정하고 합리적인 기본값을 설정하고 구성에 잠그십시오.
- 다른 사람이 만지기 전에 로깅, 기본 인증 및 속도 제한을 추가하십시오.
- 선택 사항: 웹 UI를 시작하거나 Sider.AI와 같은 더 나은 클라이언트를 연결하십시오.
정확히 한 번 (이것을 읽으면) 겪게 될 일반적인 문제
- 혼합된 CUDA/PyTorch 버전: 첫 번째 실제 로드까지는 괜찮아 보입니다. 의도적으로 버전을 일치시키십시오.
- 토크나이저 불일치: Hugging Face 모델 대 토크나이저 드리프트는 미묘한 넌센스를 만듭니다. 동기화 상태를 유지하십시오.
- 지나치게 긴 시스템 프롬프트: 당신은 격려 연설에 대한 토큰을 지불하고 있습니다. 시스템 프롬프트를 짧고 구체적이며 지루하게 만드십시오.
- 스트리밍 무시: 응답성을 위해 스트리밍을 켜십시오. 최종 사용자는 “빠르게 입력을 시작한다”는 것을 “똑똑하다”와 동일시하며 솔직히 틀리지 않습니다.
확장: 하나의 작업자로 충분하지 않은 경우
- 수평 작업자: 컨트롤러에 등록된 여러 작업자. 로켓 과학은 아니지만 각 머신에서 모델 가중치에 대한 계획이 필요합니다.
- 혼합 모델: 짧은 답변은 더 작은 모델로 라우팅하십시오. 어려운 질문은 헤비 히터에게 보내십시오. 라우팅 논리가 필요합니다. 컨트롤러는 앱을 대신 관리하지 않습니다.
- 캐싱: 일반적인 프롬프트를 메모하십시오. 이미 한 작업을 건너뛰는 것보다 더 빠르게 느껴지는 것은 없습니다.
또 다른 프레임워크 대신 FastChat을 선택하는 이유는 무엇일까요?
전체 성당을 짓지 않고 제어하고 싶기 때문입니다. 컨트롤러/작업자 분할은 건전합니다. OpenAI 호환 API는 실용적입니다. 그리고 그것이 실제로 있는 것 이상을 가장하지 않습니다. 야망을 열역학 법칙 내에서 유지하면 오후에 “아이디어”에서 “사용 가능”으로 이동할 수 있습니다.
하지만 자신을 속이지 마십시오.
FastChat을 잘 사용하는 방법은 절충안을 받아들이는 것을 의미합니다.
- 유연성을 위해 일부 광택을 포기하게 될 것입니다.
- 로그를 읽을 것이고 적어도 한 번은 이해하기 어려울 것입니다.
- 벤치마크 드래곤을 쫓고 싶은 유혹을 받을 것입니다. 저항하십시오. 대부분의 실제 작업에서 모델 선택은 프레임워크보다 더 중요합니다.
다섯 가지만 기억한다면
- 작게 시작하십시오. 더 작은 모델, 더 작은 구성, 더 적은 움직이는 부분.
- OpenAI 호환 API를 통해 일찍 테스트하십시오. 해당 경로가 작동하면 나머지는 배관입니다.
- 안정성을 손상시키기 전에 양자화하십시오. OOM은 더 빠르게 만들지 않습니다.
- 나중에 추측하고 싶지 않은 모든 것을 기록하십시오.
- 괜찮은 클라이언트를 사용하십시오. 올바른 UI는 평범한 모델을 유능하게 느끼게 하고 좋은 모델을 훌륭하게 느끼게 합니다. Sider.AI는 여기서 견고하고 번거롭지 않은 레이어입니다.
마무리: 솔직한 의견
FastChat은 오픈 소스가 SaaS인 척하지 않고 유용할 정도로 성장했을 때 일어나는 일입니다. 모듈식이고 실용적이며 당신의 손을 잡는 데 눈에 띄게 관심이 없습니다. FastChat을 사용하는 방법은 대부분 유연성을 중요하게 생각하는 도구를 사용하는 방법입니다. 명확한 목표로 시작하고, 최소 실행 가능한 파이프라인을 연결하고, 작동하면 중지하십시오. 나머지 (대시보드, 분산 작업자, 모델 동물원)는 누군가가 가동 시간 번호를 요청할 때까지 기다릴 수 있습니다.
대부분의 사람들에게 현명한 움직임은 주의를 낭비하지 않는 클라이언트 뒤에서 FastChat을 실행하는 것입니다. 만지작거리는 사람들에게는 날카로운 모서리가 있는 놀이터입니다. 모든 사람에게: 빠르다면 빠르게 만들고, 간단하게 유지하면 간단하고, 모델 선택만큼 좋습니다. 그것이 소프트웨어가 그래야 하는 방식이고, 드물게 그렇게 되는 방식입니다.
FAQ
Q1:OpenAI 호환 클라이언트로 FastChat을 어떻게 사용하나요?
클라이언트의 기본 URL을 FastChat API 서버로 가리키고 동일한 채팅/완료 스키마를 유지하십시오. 엔드포인트는 일치하지만 모델 동작은 그렇지 않습니다. 따라서 실행할 실제 모델에 대해 프롬프트와 매개변수를 테스트하십시오.
Q2:단일 GPU에서 FastChat을 실행하는 가장 좋은 방법은 무엇인가요?
여유 공간이 있는 VRAM에 맞는 모델을 선택하십시오. 쾌적함을 위해 이상적으로 양자화 (4~8비트)하십시오. 하나의 작업자를 시작하고, 토큰을 스트리밍하고, 대기 시간 스파이크를 좋아하지 않는 한 배치 크기를 작게 유지하십시오.
Q3:FastChat은 한 번에 여러 모델을 처리할 수 있나요?
예—컨트롤러는 여러 작업자와 모델을 추적합니다. 의도적으로 요청을 라우팅하십시오. '동일한 API'가 모델 간에 '상호 교환 가능한 결과'를 의미한다고 가정하지 마십시오.
Q4:새 하드웨어를 구입하지 않고 FastChat의 속도를 높이는 방법은 무엇인가요?
모델을 양자화하고, KV 캐시 재사용을 활성화하고, 응답을 스트리밍하고, max_tokens의 크기를 적절하게 조정하십시오. 일반적인 프롬프트를 캐싱하면 대부분의 노브 돌리기보다 더 도움이 됩니다.
Q5:FastChat은 RAG 파이프라인에 적합한가요?
채팅 레이어로는 잘 작동하지만 RAG 품질은 깨끗한 검색과 훈련된 프롬프트에 따라 달라집니다. FastChat은 지저분한 컨텍스트를 수정하지 않습니다. 모델을 더 빠르게 제공할 뿐입니다.