Siapkan server GenAI di perangkat keras Anda sendiri yang tersedia. Proyek ini menyediakan antarmuka web untuk berinteraksi dengan model LLaMA dan Difusi Stabil (antara lain) untuk pembuatan teks, gambar, video, dan 3D.
Banyak orang memiliki GPU bagus dan bersedia menggunakannya daripada membayar langganan OpenAI, Anthropic, dll. Di sini, Anda dapat menghosting model AI Anda sendiri, meskipun dengan banyak keterbatasan dibandingkan dengan layanan hebat tersebut. Kemudian, Anda dapat mengaksesnya dari mana saja dengan browser web, seperti ponsel atau komputer lain.
Frontend untuk ini dihosting di Halaman GitHub, sedangkan backend dihosting di mesin server Anda yang tersedia.
Setelah penyiapan, frontend akan tersedia di https://[username].github.io/PersonalAIserver
. Ikuti petunjuk di bawah ini untuk menyiapkan backend.
Untuk frontend, hanya tindakan GitHub yang perlu disiapkan untuk membangun halaman proyek. Di repositori bercabang Anda, navigasikan ke Settings -> Pages -> Source
, dan setel ke "GitHub Actions". Build akan otomatis berjalan saat Anda mendorong ke repositori, berkat file .github/workflows/main.yml
.
Jika Anda ingin menjalankan frontend secara lokal, ikuti petunjuk di bawah. Memerlukan Node.js, dapat diinstal dari manajer versi node (nvm).
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
Ini harus melayani frontend di http://localhost:3000
, yang dapat Anda akses dengan browser web.
Ini menggunakan conda untuk manajemen paket, tetapi jangan ragu untuk menggunakan pengelola paket lainnya.
Di terminal Anda di direktori backend, jalankan perintah berikut:
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
di direktori backend dengan format berikut: {
"username1": {
"username": "username1",
"password": "password1",
"disabled": false
},
"username2": {
"username": "username2",
"password": "password2",
"disabled": false
}
...
}
.secret
di direktori backend dengan string acak pilihan Anda. Ini digunakan untuk mengenkripsi token JWT. Saya sarankan membuatnya dengan: import secrets
secret_key = secrets.token_hex(32)
print(secret_key)
dan kemudian menyalin hasilnya.
Settings -> Secrets and variables -> Actions
di repositori bercabang AndaNEXT_PUBLIC_API_URL
dan nilainya adalah URL server backend (detail lebih lanjut di bawah). Contoh: https://api.example.com
.backend/backend.py
, sesuaikan CORSMiddleware
di dekat baris 40 untuk menyertakan URL frontend Anda.huggingface-cli login
dan gunakan token akses pribadi Anda yang dibuat di atas sebagai kata sandi.python backend/backend.py --public
, atau hapus --public
jika Anda ingin menjalankan server di localhost saja. Localhost mengharuskan Anda menjalankan frontend secara lokal juga.Ada banyak pilihan untuk menghosting backend di URL publik, tapi saya sarankan menggunakan Cloudflare Tunnel. Cloudflare Tunnel merutekan lalu lintas dari internet ke server Anda tanpa memaparkan port atau IP lokal Anda. Ini juga mendukung HTTPS, enkripsi SSL, dan perlindungan DDoS, di antara fitur keamanan lainnya yang mungkin perlu Anda atur dan pelihara sendiri.
Pilihan lainnya meliputi:
Untuk Cloudflare Tunnel, Anda memerlukan nama domain dan akun Cloudflare.
cloudflared tunnel login
. Langkah ini membuka jendela browser untuk login dengan akun Cloudflare Anda.cloudflared tunnel create genai-api
. Langkah ini menghasilkan ID terowongan, catat ini untuk langkah selanjutnya. 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>
harus berupa nama domain yang Anda daftarkan pada server nama Cloudflare, dan dapat berupa subdomain. Misalnya, jika Anda memiliki example.com
, Anda dapat menggunakan genai.example.com
atau api.example.com
. 5. Buat catatan DNS cloudflared tunnel route dns <tunnel-id> <your-api-url>
. Ini menciptakan terowongan bagi Cloudflare untuk merutekan lalu lintas dari internet ke server Anda tanpa memaparkan port atau IP lokal Anda.
Di backend/backend.py
, Anda dapat mengubah model yang digunakan. Temukan model di Hugging Face yang ingin Anda gunakan untuk pembuatan teks/gambar, dan sesuaikan konfigurasi model ModelManager
(baris ~127). Secara default, ini menggunakan model LLaMA 3.2-1B-Instruct untuk pembuatan teks dan model medium Stable Diffusion 3.5 untuk pembuatan gambar. Di bawah ini adalah persyaratan VRAM untuk setiap model yang diuji.
Tipe Model | Nama Model | Penggunaan VRAM (GB) | Catatan |
---|---|---|---|
Teks | meta-llama/Llama-3.2-1B-Instruksikan | ~8 | Model dasar untuk pembuatan teks |
Gambar | stabilitasai/difusi-stabil-3,5-medium | ~13 | Bekerja dengan baik di RTX 4090 |
Gambar | stabilitasai/difusi-stabil-3,5-besar | ~20-30 | Melebihi 4090 VRAM untuk perintah yang panjang |
Catatan: Penggunaan VRAM dapat bervariasi tergantung pada resolusi gambar, panjang teks yang diminta, dan parameter lainnya. Nilai yang ditampilkan adalah perkiraan untuk pengaturan default. Model transformator terkuantisasi didukung untuk mengurangi penggunaan VRAM, namun tidak digunakan secara default (lihat baris backend/backend.py
178-192). Model difusi stabil yang besar hampir tidak dapat ditampung dalam VRAM 4090 saya dengan kuantisasi. Kecepatan Chatbot sangat cepat pada 4090 saya, dengan pembuatan gambar memerlukan waktu hingga 30 detik untuk 100 langkah untuk gambar 1024x1024.
Perintah sistem untuk model bahasa dapat ditemukan di backend/system_prompt.txt
. Saat ini, ini adalah spin dari model Claude 3.5 Sonnet Anthropic, yang dirilis pada 22 Oktober 2024. https://docs.anthropic.com/en/release-notes/system-prompts#claude-3-5-sonnet