사용 가능한 하드웨어에 GenAI 서버를 구축하세요. 이 프로젝트는 텍스트, 이미지, 비디오 및 3D 생성을 위해 LLaMA 및 Stable Diffusion 모델(특히)과 상호 작용할 수 있는 웹 인터페이스를 제공합니다.
많은 사람들이 훌륭한 GPU를 보유하고 있으며 OpenAI, Anthropic 등의 구독 비용을 지불하는 대신 이를 사용하려고 합니다. 비록 훌륭한 서비스에 비해 많은 제한이 있지만 여기서는 자신만의 AI 모델을 호스팅할 수 있습니다. 그런 다음 휴대폰이나 다른 컴퓨터 등 웹 브라우저를 사용하여 어디서나 액세스할 수 있습니다.
이에 대한 프런트엔드는 GitHub 페이지에서 호스팅되는 반면 백엔드는 사용 가능한 서버 시스템에서 호스팅됩니다.
설정 후에는 https://[username].github.io/PersonalAIserver
에서 프런트엔드를 사용할 수 있습니다. 백엔드를 설정하려면 아래 지침을 따르세요.
프런트엔드의 경우 프로젝트 페이지를 빌드하려면 GitHub 작업만 설정하면 됩니다. 포크된 저장소에서 Settings -> Pages -> Source
로 이동하여 "GitHub Actions"로 설정하세요. .github/workflows/main.yml
파일 덕분에 저장소에 푸시하면 빌드가 자동으로 실행됩니다.
프런트엔드를 로컬에서 실행하려면 아래 지침을 따르세요. 노드 버전 관리자(nvm)에서 설치할 수 있는 Node.js가 필요합니다.
nvm install 20
npm install -D @shadcn/ui
npx shadcn@latest init # Select default style, any color, and dont use css variables.
npx shadcn@latest add alert button card input textarea # Accept defaults
npm install lucide-react
npm install -D @tailwindcss/typography
npm install clsx tailwind-merge
npm install
npm install sharp
npm run dev
이는 웹 브라우저로 액세스할 수 있는 http://localhost:3000
에서 프런트엔드를 제공해야 합니다.
이는 패키지 관리에 conda를 사용하지만 다른 패키지 관리자를 자유롭게 사용해도 됩니다.
백엔드 디렉터리의 터미널에서 다음 명령을 실행합니다.
conda create -n personalai python=3.11
conda activate personalai
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
pip install -r requirements.txt
users.json
파일을 만듭니다. {
"username1": {
"username": "username1",
"password": "password1",
"disabled": false
},
"username2": {
"username": "username2",
"password": "password2",
"disabled": false
}
...
}
.secret
파일을 만듭니다. 이는 JWT 토큰을 암호화하는 데 사용됩니다. 다음을 사용하여 생성하는 것이 좋습니다. import secrets
secret_key = secrets.token_hex(32)
print(secret_key)
그런 다음 출력을 복사합니다.
Settings -> Secrets and variables -> Actions
으로 이동합니다.NEXT_PUBLIC_API_URL
이고 값이 백엔드 서버의 URL인 저장소 비밀을 추가합니다(자세한 내용은 아래 참조). 예: https://api.example.com
.backend/backend.py
에서 40행 근처의 CORSMiddleware
조정하여 프런트엔드의 URL을 포함합니다.huggingface-cli login
으로 Hugging Face에 로그인하고, 위에서 생성한 개인 액세스 토큰을 비밀번호로 사용하세요.python backend/backend.py --public
사용하여 백엔드를 실행하거나, localhost에서만 서버를 실행하려면 --public
제거하세요. Localhost에서는 프런트엔드를 로컬에서 실행해야 합니다.공개 URL에서 백엔드를 호스팅하는 데는 다양한 옵션이 있지만 Cloudflare Tunnel을 사용하는 것이 좋습니다. Cloudflare Tunnel은 포트나 로컬 IP를 노출하지 않고 인터넷에서 서버로 트래픽을 라우팅합니다. 또한 직접 설정하고 유지 관리해야 하는 기타 보안 기능 중에서 HTTPS, SSL 암호화, DDoS 보호도 지원합니다.
기타 옵션은 다음과 같습니다.
Cloudflare Tunnel의 경우 도메인 이름과 Cloudflare 계정이 필요합니다.
cloudflared tunnel login
실행하세요. 이 단계에서는 Cloudflare 계정으로 로그인할 수 있는 브라우저 창이 열립니다.cloudflared tunnel create genai-api
실행하세요. 이 단계에서는 터널 ID를 생성합니다. 다음 단계에서 이를 참고하세요. tunnel: <your-tunnel-id>
credentials-file: /home/user/.cloudflared/<tunnel-id>.json
ingress:
- hostname: <your-api-url>
service: http://localhost:8000
- service: http_status:404
<your-api-url>
은 Cloudflare의 이름 서버에 등록한 도메인 이름이어야 하며 하위 도메인일 수 있습니다. 예를 들어 example.com
소유한 경우 genai.example.com
또는 api.example.com
사용할 수 있습니다. 5. DNS 레코드 cloudflared tunnel route dns <tunnel-id> <your-api-url>
생성합니다. 이렇게 하면 포트나 로컬 IP를 노출하지 않고 인터넷에서 서버로 트래픽을 라우팅하는 Cloudflare용 터널이 생성됩니다.
backend/backend.py
에서 사용된 모델을 변경할 수 있습니다. Hugging Face에서 텍스트/이미지 생성에 사용하려는 모델을 찾고 ModelManager
모델 구성을 조정합니다(~127행). 기본적으로 텍스트 생성에는 LLaMA 3.2-1B-Instruct 모델을 사용하고 이미지 생성에는 Stable Diffusion 3.5 중간 모델을 사용합니다. 다음은 테스트한 각 모델의 VRAM 요구 사항입니다.
모델 유형 | 모델명 | VRAM 사용량(GB) | 메모 |
---|---|---|---|
텍스트 | 메타-라마/라마-3.2-1B-지시 | ~8 | 텍스트 생성을 위한 기본 모델 |
영상 | Stabilityai/안정-확산-3.5-매체 | ~13 | RTX 4090에서 잘 작동합니다. |
영상 | Stabilityai/안정-확산-3.5-대형 | ~20-30 | 긴 프롬프트의 경우 4090 VRAM을 초과합니다. |
참고: VRAM 사용량은 이미지 해상도, 텍스트 프롬프트 길이 및 기타 매개변수에 따라 달라질 수 있습니다. 표시된 값은 기본 설정에 대한 대략적인 값입니다. VRAM 사용량을 더욱 줄이기 위해 양자화된 변환기 모델이 지원되지만 기본적으로 사용되지는 않습니다( backend/backend.py
라인 178-192 참조). 크고 안정적인 확산 모델은 양자화를 사용하는 4090의 VRAM에 거의 맞지 않습니다. 챗봇 속도는 내 4090에서 매우 빠르며, 이미지 생성은 1024x1024 이미지의 경우 100단계에 최대 30초가 소요됩니다.
언어 모델에 대한 시스템 프롬프트는 backend/system_prompt.txt
에서 찾을 수 있습니다. 현재는 2024년 10월 22일에 출시된 Anthropic의 Claude 3.5 Sonnet 모델을 기반으로 한 것입니다. https://docs.anthropic.com/en/release-notes/system-prompts#claude-3-5-sonnet