از طریق K8S Deepseek را به صورت محلی در Baremetal اجرا کنید

Deepseek چیست؟
درست همانطور که Openai چت بابات چته را دارد ، Deepseek همچنین دارای یک چت بابات مشابه است و دارای دو مدل است: Deepseek-V3 و Deepseek-R1.
** Deepseek-V3 ** مدل پیش فرض مورد استفاده در هنگام تعامل با برنامه Deepseek است. این یک مدل زبان بزرگ همه کاره (LLM) است که به عنوان ابزاری با هدف کلی که می تواند طیف گسترده ای از کارها را بر عهده بگیرد ، معرفی می شود.
Deepseek-R1 یک مدل استدلال قدرتمند است که برای حل کارهایی که نیاز به استدلال پیشرفته و حل مسئله عمیق دارند ، ساخته شده است. این برای چالش های برنامه نویسی که فراتر از کدهای تنظیم مجدد هزاران بار و سؤالات منطق سنگین است ، بسیار عالی است.
آنچه به Deepseek شهرت چشمگیر داد ، ترفندهای ریاضی مورد استفاده برای تقویت کارآیی و جبران بهبود عملکرد GPU NVIDIA و کتابخانه ارتباطات جمعی (NCCL) بود
به طور خلاصه ، Deepseek از Smart Math برای جلوگیری از استفاده از HW گران قیمت مانند GPU H100 Nvidia برای آموزش مجموعه داده های بزرگ استفاده کرد.
همچنین بر نحوه اجرای و استفاده از مدل تأثیر می گذارد ، از این رو می توانیم آن را بر روی سرورهای محلی با قدرت محاسباتی طبیعی (بدون GPU) اجرا کنیم.
ترفندهای ریاضی Deepseek برای کارآیی محاسباتی:
1. تقریب های پایین برای محاسبه سریعتر
یکی از بهینه سازی های اصلی Deepseek تقریب ماتریس کم درجه است که باعث کاهش تعداد عملیات مورد نیاز در ضرب ماتریس می شود. این روش ها به جای انجام ضربهای ماتریس کامل ، ماتریس ها را با بازنمایی های بعدی کمتر ، کاهش می دهند و هزینه محاسباتی را به میزان قابل توجهی کاهش می دهند.
2. توجه پرس و جو گروهی (GQA) برای صرفه جویی در حافظه
GQA چگونگی محاسبه توجه در مدل های ترانسفورماتور را بازسازی می کند و پهنای باند حافظه مورد نیاز برای عملیات توجه را کاهش می دهد. به جای محاسبه توجه برای هر پرس و جو به طور جداگانه ، GQA به چندین نمایش داده می شود تا بتوانند همان جفت های ارزش کلیدی را به اشتراک بگذارند ، که منجر به:
- مصرف حافظه پایین
- استنباط سریعتر سرعت
- محاسبات اضافی را کاهش می دهد
3. آموزش دقیق برای سرعت و کارآیی
Deepseek از آموزش دقیق مخلوط استفاده می کند ، جایی که محاسبات به جای FP32 از FP16/BF16 استفاده می کنند ، باعث کاهش ردپای حافظه و تسریع در آموزش می شوند. با این حال ، برای حفظ پایداری عددی ، تکنیک های مقیاس بندی از دست دادن استفاده می شود ، و اطمینان حاصل می شود که شیب های کوچک به دلیل کوتاه شدن دقیق از بین نمی روند.
4. کمیت برای کاهش پیچیدگی محاسباتی
فراتر از دقت مختلط ، Deepseek همچنین از کمیت بهره می برد ، جایی که تانسور با استفاده از دقت بیت پایین نشان داده می شود (به عنوان مثال ، INT8). این امر باعث می شود ضرب های سریعتر ماتریس و کاهش میزان مصرف پهنای باند حافظه ، آموزش کارآمدتر شود.
5. گردی تصادفی برای حفظ دقت
هنگام استفاده از قالبهای شناور با دقت پایین ، از گردان تصادفی برای کاهش تجمع خطاهای گرد استفاده می شود ، و اطمینان می دهد که این مدل با وجود استفاده از دقت کاهش یافته ، دقت بالایی را حفظ می کند.
بهینه سازی ریاضی Deepseek امکان آموزش ارزان تر و مدل های سبک تر را فراهم می کند که می توانیم با حداقل HW روی سرورها/رایانه های شخصی اجرا کنیم.
چرا کسی یک مدل LLM را به صورت محلی اجرا می کند؟
اجرای یک مدل بزرگ زبان (LLM) بسته به مورد و مورد نیاز ، چندین مزیت را ارائه می دهد. در اینجا چند دلیل مهم وجود دارد که چرا ممکن است شخصی بتواند LLM را به صورت محلی اجرا کند:
1. حریم خصوصی و امنیت داده ها
- داده های حساس: هنگام کار با اطلاعات محرمانه یا حساس (به عنوان مثال ، داده های پزشکی ، حقوقی یا اختصاصی تجاری) ، اجرای این مدل به صورت محلی تضمین می کند که داده ها هرگز محیط شما را ترک نمی کنند و خطر قرار گرفتن در معرض یا نقض را کاهش می دهند.
- انطباق: استقرار محلی می تواند به برآورده کردن الزامات نظارتی (به عنوان مثال ، GDPR ، HIPAA) کمک کند که داده ها را برای ماندن در محل انجام دهد.
2. کنترل و سفارشی سازی
- کنترل کامل: اجرای یک LLM به صورت محلی به شما امکان کنترل کامل بر روی مدل ، پیکربندی آن و زیرساخت های موجود در آن را می دهد.
- سفارشی سازی: شما می توانید مدل را تنظیم کنید یا مدل را متناسب با نیازهای خاص تنظیم کنید ، که ممکن است با API های مبتنی بر ابر امکان پذیر یا مقرون به صرفه نباشد.
3. راندمان هزینه
- کاهش هزینه های API: خدمات LLM مبتنی بر ابر اغلب بر اساس استفاده (به عنوان مثال ، در هر توکن یا تماس API) شارژ می شوند. اجرای مدل به صورت محلی می تواند مقرون به صرفه تر برای استفاده از حجم بالا یا مداوم باشد.
- بدون هزینه اشتراک: استقرار محلی از تکرار هزینه های اشتراک مرتبط با خدمات LLM مبتنی بر ابر جلوگیری می کند.
4. عملکرد و تأخیر
- تأخیر پایین: استقرار محلی تأخیر شبکه را از بین می برد ، که به ویژه برای برنامه های کاربردی در زمان واقعی یا زمانی که زمان کم پاسخ بسیار مهم است مهم است.
- عملکرد قابل پیش بینی: شما می توانید پشته سخت افزار و نرم افزار را برای اطمینان از عملکرد مداوم بهینه کنید ، بدون اینکه تحت تأثیر عوامل بیرونی مانند قطع سرویس ابری یا دریچه گاز قرار بگیرید.
5. دسترسی آفلاین
- بدون وابستگی به اینترنت: اجرای مدل به صورت محلی به شما امکان می دهد از آن در محیط هایی بدون دسترسی به اینترنت قابل اعتماد مانند مکان های از راه دور یا امکانات امن استفاده کنید.
- بازیابی فاجعه: استقرار محلی تضمین می کند که این مدل حتی در هنگام قطع اینترنت یا اختلال در سرویس ابری در دسترس باشد.
6. شفافیت و اشکال زدایی
- شفافیت مدل: اجرای مدل به صورت محلی به شما امکان می دهد رفتار ، خروجی ها و مراحل متوسط آن را بازرسی کنید ، که می تواند برای اشکال زدایی یا درک روند تصمیم گیری آن بسیار مهم باشد.
- تجزیه و تحلیل خطا: وقتی مدل تحت کنترل شما است ، می توانید خطاها یا خروجی های غیر منتظره را به طور مؤثرتری وارد کنید و تجزیه و تحلیل کنید.
7. پایداری طولانی مدت
- از قفل کردن فروشنده خودداری کنید: با اجرای مدل به صورت محلی ، شما به یک ارائه دهنده یا خدمات خاص ابر وابسته نیستید و خطر قفل فروشنده را کاهش می دهید.
- اثبات آینده: استقرار محلی تضمین می کند که شما می توانید با استفاده از مدل حتی اگر سرویس ابری قیمت ، شرایط خود را تغییر دهد یا سرویس را قطع کند ، ادامه دهید.
8. تحقیق و توسعه
محققان و توسعه دهندگان می توانند بدون محدودیت هایی که توسط ارائه دهندگان ابر اعمال می شود ، با معماری مدل ، داده های آموزش یا فرآیندهای تنظیم دقیق آزمایش کنند.
چیزهای دستی:
روش های زیادی وجود دارد که می توانید Deepseek را به صورت محلی اجرا کنید.
من به عنوان طرفدار K8s و ظروف ، روش کانتینر شده را انتخاب کردم.
در اینجا من مدل Deepseek-R1 را به صورت محلی در یک خوشه Kubernetes اجرا می کنم. این خوشه روی VM اجرا می شود که روی یک لپ تاپ شخصی اجرا می شود. ممکن است کسی استدلال کند که چنین تنظیماتی در واقع یک تنظیم بارم نیست که صحیح است ، اما همان پیکربندی K8S را می توان مستقیماً در Baremetal استفاده کرد. در مورد من برای راحتی آن را در یک VM اجرا کردم ..
مشخصات تنظیم:
- 1 VM با 32 گرم رم و 16 هسته / Intel I9-9880H CPU @ 2.30GHz.
- از GPU استفاده نشده است.
- 50 گیگابایت ذخیره سازی به VM اختصاص داده شده است.
- اوبونتو 22.04.5 LTS.
- Minikube K8s.
- Deepseek-R1 با پارامترهای 7 میلیارد (تصویر Ollama Docker).
- پیاز وب را باز کنید.
مراحل عملی:
1- توزیع K8S را که احساس راحتی می کنید نصب کنید.
در اینجا من از Minikube K8S و تخصیص حافظه 14 VCPU و 28 گیگابایتی برای خوشه استفاده می کنم.minikube start - cpus=14 - memory=28672
2- حجم پایداری K8S (PV) از هر نوع (استاتیک یا پویا) را آماده کنید ، زیرا بعداً توسط 2 PersistrustVolumeclaims (PVC) مصرف می شود.
توجه: اگر از Minikube K8S استفاده می کنید ، می توانید همانطور که در اینجا توضیح داده شده است ، از افزونه ذخیره سازی-خوشه ای ذخیره سازی استفاده کنید
3- به https://ollama.com/ بروید و مدل مورد نظر خود را انتخاب کنید. در اینجا من Deepseek-R1 را با 14 میلیارد پارامتر انتخاب می کنم. بسته به منابع دستگاه خود ، مدل پارامتر کمتری را انتخاب کنید.
4- پس از تنظیم K8S در حال اجرا ، پیکربندی YAML زیر را از طریق Kubectl اجرا کنید ..
این تصاویر را بارگیری و اجرا می کند:
- مدل Deepseek-R1 14b.
- وب باز
همچنین حجم های مورد نیاز را تهیه می کند ، و GUI WEBUI را از طریق پورت 11434 در معرض تعامل با مدل قرار می دهد ..
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: open-webui-storage
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: ollama-storage
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: open-webui
spec:
replicas: 1
selector:
matchLabels:
app: open-webui
template:
metadata:
labels:
app: open-webui
spec:
containers:
- name: open-webui
image: ghcr.io/open-webui/open-webui:latest
env:
- name: OLLAMA_BASE_URL
value: "http://127.0.0.1:11434"
volumeMounts:
- mountPath: /app/backend/data
name: open-webui-storage
volumes:
- name: open-webui-storage
persistentVolumeClaim:
claimName: open-webui-storage
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: ollama
spec:
replicas: 1
selector:
matchLabels:
app: ollama
template:
metadata:
labels:
app: ollama
spec:
containers:
- name: ollama
image: ollama/ollama:latest
volumeMounts:
- mountPath: /root/.ollama
name: ollama-storage
volumes:
- name: ollama-storage
persistentVolumeClaim:
claimName: ollama-storage
---
apiVersion: batch/v1
kind: Job
metadata:
name: ollama-pull-llama
spec:
template:
spec:
restartPolicy: Never
containers:
- name: ollama-pull-llama
image: ollama/ollama:latest
command: ["/bin/sh", "-c", "sleep 3; OLLAMA_HOST=127.0.0.1:11434 ollama pull deepseek-r1:7b"]
volumeMounts:
- mountPath: /root/.ollama
name: ollama-storage
volumes:
- name: ollama-storage
persistentVolumeClaim:
claimName: ollama-storage
بسته به اتصال اینترنتی شما ، حدود 2 دقیقه طول می کشد تا تمام تصاویر مورد نیاز (4.5 گیگابایت پوند) را بکشید و آنها را در خوشه K8S خود اجرا کنید.
توجه: قبل از شروع استفاده از مدل ، کار Ollama Pull باید در وضعیت کامل باشد. تمام غلافهای دیگر باید در وضعیت اجرا باشند.
لحظه حقیقت – آزمون ، آزمون
اکنون که ما یک تنظیم محلی آماده از جمله یک مدل در حال اجرا ، ذخیره سازی آن و درگاه در معرض آن داریم. بیایید آزمایش را شروع کنیم:
سوالات اول: ترانزیستور چیست؟
فکر کردن و نوشتن جواب حدود 50 پوند بود
سوال دوم: چند حرف (الف) به نام (ANAS) وجود دارد؟
برخی از مدل ها با چنین سؤالاتی مبارزه می کنند. در مجموعه محلی Deepseek-R1 من حدود 80 پوند طول کشید تا استدلال کند ، فکر کند و به درستی پاسخ دهد.
در زیر عکس فوری از Linux VM من با تمام CPU اختصاص داده شده در حال وحشی است که سعی می کند در حالی که به سؤالات پاسخ می دهد ، مدل را اجرا کند ..
یادگیری مبارک!