Installez un serveur GenAI sur votre propre matériel disponible. Ce projet fournit une interface Web pour interagir avec les modèles LLaMA et Stable Diffusion (entre autres) pour la génération de texte, d'image, de vidéo et de 3D.
De nombreuses personnes disposent d'un bon GPU et sont prêtes à l'utiliser au lieu de payer des abonnements à OpenAI, Anthropic, etc. Ici, vous pouvez héberger vos propres modèles d'IA, bien qu'avec de nombreuses limitations par rapport à ces excellents services. Ensuite, vous pouvez y accéder depuis n'importe où avec un navigateur Web, comme votre téléphone ou un autre ordinateur.
Le frontend est hébergé sur les pages GitHub, tandis que le backend est hébergé sur votre serveur disponible.
Après la configuration, l'interface sera disponible sur https://[username].github.io/PersonalAIserver
. Suivez les instructions ci-dessous pour configurer le backend.
Pour le frontend, seule une action GitHub doit être configurée pour créer la page du projet. Dans votre référentiel forké, accédez à Settings -> Pages -> Source
et définissez-le sur « GitHub Actions ». La build s'exécutera automatiquement lorsque vous pousserez vers le référentiel, grâce au fichier .github/workflows/main.yml
.
Si vous souhaitez exécuter le frontend localement, suivez les instructions ci-dessous. Nécessite Node.js, installable à partir du gestionnaire de versions de nœud (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
Cela devrait servir l'interface http://localhost:3000
, à laquelle vous pouvez accéder avec un navigateur Web.
Cela utilise conda pour la gestion des packages, mais n'hésitez pas à utiliser n'importe quel autre gestionnaire de packages.
Dans votre terminal dans le répertoire backend, exécutez les commandes suivantes :
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
dans le répertoire backend au format suivant : {
"username1": {
"username": "username1",
"password": "password1",
"disabled": false
},
"username2": {
"username": "username2",
"password": "password2",
"disabled": false
}
...
}
.secret
dans le répertoire backend avec une chaîne aléatoire de votre choix. Ceci est utilisé pour chiffrer le jeton JWT. Je recommande d'en générer un avec : import secrets
secret_key = secrets.token_hex(32)
print(secret_key)
puis en copiant la sortie.
Settings -> Secrets and variables -> Actions
dans votre référentiel forkéNEXT_PUBLIC_API_URL
et la valeur étant l'URL du serveur backend (plus de détails ci-dessous). Exemple : https://api.example.com
.backend/backend.py
, ajustez le CORSMiddleware
près de la ligne 40 pour inclure les URL de votre frontend.huggingface-cli login
et utilisez votre jeton d'accès personnel créé ci-dessus comme mot de passe.python backend/backend.py --public
, ou supprimez --public
si vous souhaitez exécuter le serveur sur localhost uniquement. Localhost nécessite également que vous exécutiez le frontend localement.De nombreuses options existent pour héberger le backend sur une URL publique, mais je recommande d'utiliser Cloudflare Tunnel. Cloudflare Tunnel achemine le trafic d'Internet vers votre serveur sans exposer un port ou votre adresse IP locale. Il prend également en charge HTTPS, le cryptage SSL et la protection DDoS, entre autres fonctionnalités de sécurité que vous auriez autrement besoin de configurer et de gérer vous-même.
D'autres options incluent :
Pour Cloudflare Tunnel, vous aurez besoin d'un nom de domaine et d'un compte Cloudflare.
cloudflared tunnel login
. Cette étape ouvre une fenêtre de navigateur pour vous connecter avec votre compte Cloudflare.cloudflared tunnel create genai-api
. Cette étape génère un ID de tunnel, notez-le pour les étapes suivantes. 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
Le <your-api-url>
doit être le nom de domaine que vous avez enregistré auprès des serveurs de noms de Cloudflare et peut être un sous-domaine. Par exemple, si vous possédez example.com
, vous pouvez utiliser genai.example.com
ou api.example.com
. 5. Créez un enregistrement DNS cloudflared tunnel route dns <tunnel-id> <your-api-url>
. Cela crée le tunnel permettant à Cloudflare d'acheminer le trafic d'Internet vers votre serveur sans exposer un port ou votre adresse IP locale.
Dans backend/backend.py
, vous pouvez modifier les modèles utilisés. Recherchez le modèle sur Hugging Face que vous souhaitez utiliser pour la génération de texte/image et ajustez les configurations du modèle ModelManager
(ligne ~ 127). Par défaut, cela utilise le modèle LLaMA 3.2-1B-Instruct pour la génération de texte et le modèle moyen Stable Diffusion 3.5 pour la génération d'images. Vous trouverez ci-dessous les exigences VRAM pour chaque modèle testé.
Type de modèle | Nom du modèle | Utilisation de la VRAM (Go) | Remarques |
---|---|---|---|
Texte | méta-llama/Llama-3.2-1B-Instruct | ~8 | Modèle de base pour la génération de texte |
Image | stabilitéai/stable-diffusion-3.5-medium | ~13 | Fonctionne bien sur RTX 4090 |
Image | stabilitéai/stable-diffusion-3.5-large | ~20-30 | Dépasse 4 090 VRAM pour les invites longues |
Remarque : L'utilisation de la VRAM peut varier en fonction de la résolution de l'image, de la longueur des invites textuelles et d'autres paramètres. Les valeurs affichées sont approximatives pour les paramètres par défaut. Les modèles de transformateur quantifié sont pris en charge pour réduire davantage l'utilisation de la VRAM, mais ne sont pas utilisés par défaut (voir les lignes backend/backend.py
178-192). Le grand modèle de diffusion stable peut à peine tenir dans la VRAM de mon 4090 avec quantification. Les vitesses du chatbot sont extrêmement rapides sur mon 4090, la génération d'images prenant jusqu'à 30 secondes pour 100 étapes pour des images 1024x1024.
L'invite système pour le modèle de langage se trouve dans backend/system_prompt.txt
. Pour le moment, il s'agit d'une version du modèle Claude 3.5 Sonnet d'Anthropic, sorti le 22 octobre 2024. https://docs.anthropic.com/en/release-notes/system-prompts#claude-3-5-sonnet