قم بإعداد خادم GenAI على أجهزتك المتاحة. يوفر هذا المشروع واجهة ويب للتفاعل مع نماذج LLaMA وStable Diffusion (من بين نماذج أخرى) للنصوص والصور والفيديو والتوليد ثلاثي الأبعاد.
يمتلك العديد من الأشخاص وحدة معالجة رسومات جيدة في متناول اليد وهم على استعداد لاستخدامها بدلاً من الدفع مقابل الاشتراكات من OpenAI وAnthropic وما إلى ذلك. هنا، يمكنك استضافة نماذج الذكاء الاصطناعي الخاصة بك، وإن كان ذلك مع العديد من القيود مقارنة بتلك الخدمات الرائعة. وبعد ذلك، يمكنك الوصول إليه من أي مكان باستخدام متصفح الويب، مثل هاتفك أو جهاز كمبيوتر آخر.
تتم استضافة الواجهة الأمامية لهذا على صفحات GitHub، بينما تتم استضافة الواجهة الخلفية على جهاز الخادم المتوفر لديك.
بعد الإعداد، ستكون الواجهة الأمامية متاحة على https://[username].github.io/PersonalAIserver
. اتبع الإرشادات أدناه لإعداد الواجهة الخلفية.
بالنسبة للواجهة الأمامية، يلزم إعداد إجراء GitHub فقط لإنشاء صفحة المشروع. في مستودعك المتشعب، انتقل إلى Settings -> Pages -> Source
، وقم بتعيينه على "إجراءات GitHub". سيتم تشغيل الإصدار تلقائيًا عند الانتقال إلى المستودع، وذلك بفضل ملف .github/workflows/main.yml
.
إذا كنت تريد تشغيل الواجهة الأمامية محليًا، فاتبع الإرشادات أدناه. يتطلب Node.js، القابل للتثبيت من مدير إصدار العقدة (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
يجب أن يخدم هذا الواجهة الأمامية على 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
، اضبط CORSMiddleware
بالقرب من السطر 40 لتضمين عناوين URL الخاصة بالواجهة الأمامية.huggingface-cli login
واستخدم رمز الوصول الشخصي الذي تم إنشاؤه أعلاه ككلمة المرور.python backend/backend.py --public
، أو قم بإزالة --public
إذا كنت تريد تشغيل الخادم على المضيف المحلي فقط. يتطلب المضيف المحلي تشغيل الواجهة الأمامية محليًا أيضًا.توجد العديد من الخيارات لاستضافة الواجهة الخلفية على عنوان URL عام، لكنني أوصي باستخدام Cloudflare Tunnel. يقوم Cloudflare Tunnel بتوجيه حركة المرور من الإنترنت إلى الخادم الخاص بك دون الكشف عن منفذ أو عنوان IP المحلي الخاص بك. كما أنه يدعم HTTPS، وتشفير SSL، وحماية DDoS، من بين ميزات الأمان الأخرى التي قد تحتاجها لإعداد نفسك وصيانتها.
تشمل الخيارات الأخرى ما يلي:
بالنسبة إلى Cloudflare Tunnel، ستحتاج إلى اسم مجال وحساب Cloudflare.
cloudflared tunnel login
. تفتح هذه الخطوة نافذة متصفح لتسجيل الدخول باستخدام حساب Cloudflare الخاص بك.cloudflared tunnel create genai-api
. تنشئ هذه الخطوة معرف نفق، لاحظ ذلك للخطوات التالية. 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>
. يؤدي هذا إلى إنشاء نفق لـ Cloudflare لتوجيه حركة المرور من الإنترنت إلى الخادم الخاص بك دون الكشف عن منفذ أو عنوان IP المحلي الخاص بك.
في backend/backend.py
، يمكنك تغيير النماذج المستخدمة. ابحث عن النموذج في Hugging Face الذي ترغب في استخدامه لإنشاء نص/صورة، واضبط تكوينات نموذج ModelManager
(السطر ~127). افتراضيًا، يستخدم هذا نموذج LLaMA 3.2-1B-Instruct لإنشاء النص والنموذج المتوسط Stable Diffusion 3.5 لإنشاء الصور. فيما يلي متطلبات VRAM لكل طراز تم اختباره.
نوع النموذج | اسم النموذج | استخدام VRAM (جيجابايت) | ملحوظات |
---|---|---|---|
نص | meta-llama/Llama-3.2-1B-Instruct | ~8 | النموذج الأساسي لتوليد النص |
صورة | الاستقرار / الانتشار المستقر 3.5 متوسط | ~13 | يعمل بشكل جيد على RTX 4090 |
صورة | الاستقرار / الانتشار المستقر -3.5 - كبير | ~20-30 | يتجاوز 4090 VRAM للمطالبات الطويلة |
ملاحظة: قد يختلف استخدام VRAM وفقًا لدقة الصورة وطول المطالبات النصية والمعلمات الأخرى. القيم المعروضة تقريبية للإعدادات الافتراضية. يتم دعم نماذج المحولات الكمية لتقليل استخدام VRAM بشكل أكبر، ولكن لا يتم استخدامها بشكل افتراضي (راجع خطوط backend/backend.py
178-192). نموذج الانتشار المستقر الكبير لا يكاد يتناسب مع VRAM طراز 4090 الخاص بي مع التكميم. تعد سرعات Chatbot سريعة للغاية على جهاز 4090 الخاص بي، حيث يستغرق إنشاء الصور ما يصل إلى 30 ثانية لكل 100 خطوة للصور مقاس 1024 × 1024.
يمكن العثور على موجه النظام الخاص بنموذج اللغة في backend/system_prompt.txt
. في الوقت الحالي، يعد هذا بمثابة تحديث لنموذج Anthropic's Claude 3.5 Sonnet، الذي تم إصداره في 22 أكتوبر 2024. https://docs.anthropic.com/en/release-notes/system-prompts#claude-3-5-sonnet