دليل استضافة ذاتية لـ Discourse AI

هل هناك سبب معين لعدم وجود أوامر Docker هذه في الوضع المنفصل (مفقود -d)؟

إذا كنت تقصد “ألا ينبغي علي تشغيل هذه باستخدام -d؟” فالإجابة على الأرجح هي نعم.

إذا كنت تقصد حقًا “لماذا لم يخبرني المؤلف بتشغيل هذه الأوامر باستخدام -d؟”، أعتقد أنها تهدف إلى أن تكون مجرد أمثلة لكيفية تشغيلها وجعلها تعمل على الإطلاق. في الممارسة العملية، سترغب في القيام ببعض \u003cother stuff\u003e لتشغيلها بطريقة تجعلها مفيدة في بيئة الإنتاج.

3 إعجابات

هذا هو سؤالي بالضبط وأصبت الهدف. لقد مر بعض الوقت منذ أن قمت بتكوين مثيلات Docker الخاصة بي، ولكن هذا يعود الآن. عندما تقول “أشياء أخرى” يجب أن أفعلها لجعلها مفيدة للإنتاج، هل هناك أي شيء آخر يجب أن يصرخ في وجهي “افعل هذا!” (بخلاف تغيير رقم المنفذ الواضح من نفس 6666 في كل مثيل من مثيلات Docker)؟

حسنًا. بالنسبة لمفاتيح واجهة برمجة التطبيقات (API) المفصولة بعلامة الخط العمودي، هل هي اعتباطية تمامًا مثل مضيف الخدمة، وهل نحدد ببساطة أي مفتاح (أو مفاتيح) أبجدي رقمي نريد قبوله من العميل؟

كيف يكون تغيير المنفذ أقل “وضوحًا” من تشغيله في الخلفية؟

هذه هي المشكلة. بدون معرفة دقيقة بما تعتقد أنه واضح، من المستحيل الإجابة على السؤال. في الغالب، إذا لم تكن متأكدًا تمامًا من كيفية جعل الأشياء مفيدة، فربما تحتاج إلى مساعدة لا يمكنك الحصول عليها هنا. :person_shrugging:

لأنني قمت بتشغيل عشرات حاويات Docker في الماضي. لم ألمس Docker إلا في العامين الماضيين وانغمست بعمق. لم يكن الأمر واضحًا في البداية بما أنني لم ألمسه منذ فترة، لكن هذه المعرفة الأساسية لاستخدام Docker عادت عند المناقشة.

هذا هو الأمر. بدون معرفة عميقة بما تعتقد أنه واضح، من المستحيل الإجابة على السؤال. في الغالب، إذا لم تكن متأكدًا تمامًا من كيفية جعل الأشياء مفيدة، فأنت على الأرجح بحاجة إلى مساعدة لا يمكنك الحصول عليها هنا. :person_shrugging:

هذه هي المشكلة. في بعض الأحيان، ما هو واضح ليس واضحًا حتى لأولئك الذين لديهم خبرة في أنظمة Docker المختلفة مثلي. يمكن للمرء أن يفسر ما قلته على أنه، يجب أن تعرف الإجابة على السؤال قبل طرحه. افهم أن بعضنا يدير مجتمعات كخدمة تطوعية ولا يقضي 24-7 في تعلم أدق التفاصيل لـ Discourse وصولاً إلى هياكل بيانات Postgres وما إلى ذلك. أشعر أنك كنت ترفضني ولم يكن ذلك موضع تقدير في ما ينبغي أن يكون منتدى مجتمعيًا حيث يجب على الجميع مساعدة بعضهم البعض بحرية وسعادة.

للوصول إلى النقطة هنا، لقد قمت ببعض البحث على Google لمحاولة تحديد كيفية استخدام API_KEYS وقد قصرت. أفهم أنني قد أفتقد ما هو واضح وقد يكون ذلك محبطًا للغاية لمحترف Discourse مثلك يتمتع بخبرة واسعة في المنصة حتى أدنى مستوى، لكنني أحاول إجراء مناقشة مجتمعية هنا حتى يستفيد الآخرون أيضًا الذين ليسوا بالضرورة في مستوى مهارتك بعد. في النهاية، الهدف هو أن يتمكن الأشخاص بخلاف مطوري Discourse من استخدام هذا البرنامج أيضًا.

إعجاب واحد (1)

أشعر بألمك. العثور على خدمة أقوم بتشغيلها ولا أملك فكرة عن كيفية بدئها يحدث أكثر مما أحب.

صحيح. حتى التعليمات التي نكتبها لأنفسنا لا معنى لها عندما نحتاجها.

آسف. لم أقصد أن أكون وقحًا أو سيئًا، ويبدو أنني كنت كذلك. كانت نقطتي فقط أنه من الصعب بما فيه الكفاية دعم الأشخاص الذين يقومون بتثبيت التثبيت القياسي، لذلك فإن معرفة مهاراتك وكيف تخطط لإطلاقه وما إذا كان سيكون على الإنترنت المفتوح وما إذا كنت تعرف كيفية حمايته باستخدام https (ربما تفعل ذلك إذا كنت تعتقد أنك تحميه باستخدام مفاتيح API)، أمر صعب.

نعم. إذا كنت تضع هذا في مكان يمكن لشخص آخر الاتصال به، فأعتقد أنك سترغب في تحديد متغير API_KEYS وإيجاد طريقة لإنشاء شيء عشوائي لاستخدامه كمفتاح. ثم ستدخل نفس المفتاح في إعدادات المكون الإضافي. هذا ما فعلته. لم أتحقق من أن استخدام مفتاح خاطئ سيؤدي إلى تعطيله، وهو ما أعتقد أنه كان يجب علي فعله. ربما سأفعل ذلك على المثيل الذي سأضيف إليه المكون الإضافي.

ولكن قد يكون من الأفضل لو أضاف المنشئ الأصلي -d وقام بتعيين متغير البيئة API_KEYS.

إعجاب واحد (1)

مقبض البيئة API_KEYS هو مقبض اختياري يمكنك استخدامه إذا كنت، لأي سبب من الأسباب، ترغب في تقييد الخدمة للعملاء الذين يقدمون أحد مفاتيح API_KEYS المكونة في رأسهم.

شيء لا تحتاجه حقًا عند تشغيله داخليًا لمثيل واحد، ولكنه قد يكون مفيدًا عند تشغيله عبر الإنترنت أو في بيئة مشتركة.

3 إعجابات

شكرا @Falco و @pfaffman على مساعدتكم وآسف إذا كنت قد انحرفت عن المسار هنا! لقد تم تقدير مساعدتكم بشكل كبير! :smiley:

إعجابَين (2)

هل يمكن استخدام كل هذه الخدمات بواسطة تثبيتات Discourse متعددة، أم يجب تشغيلها على أساس كل موقع على حدة؟

إعجاب واحد (1)

إنها كلها آمنة للمشاركة بين المثيلات.

إعجابَين (2)

هل لا يزال من الممكن استخدام التلخيص باستخدام مفاتيح OpenAI API؟

نعم، املأ المفاتيح واختر نموذج OpenAI في إعداد التلخيص.

إعجاب واحد (1)

هناك مشكلة صغيرة واحدة إذا كان الموضوع يستخدم لغة أخرى غير الإنجليزية أو لغة ثانوية - فإنه يستخدم اللغة الصحيحة في وقت ما ثم يبدأ فجأة في استخدام اللغة الإنجليزية. يبدو أن تغيير اللغة في كلا الاتجاهين يحدث بشكل عشوائي تمامًا.

أنا أختبر نقطة النهاية للتلخيص:

docker run -d --rm --gpus all --shm-size 1g -p 80:80 -v /mnt:/data -e GPTQ_BITS=4 -e GPTQ_GROUPSIZE=32 -e REVISION=gptq-4bit-32g-actorder_True ghcr.io/huggingface/text-generation-inference:latest --model-id TheBloke/Upstage-Llama-2-70B-instruct-v2-GPTQ --max-batch-prefill-tokens=12000 --max-total-tokens=12000 --max-input-length=10000 --quantize=gptq --sharded=true --num-shard=$(lspci | grep NVIDIA | wc -l | tr -d '\\n') --rope-factor=2

ولكن، عندما أقوم بتشغيله، أحصل على الخطأ التالي. هذه الآلة تحتوي على (2) Tesla T4 ولا توجد عمليات أخرى تصل إلى وحدات معالجة الرسومات. انظر الاستخدام أدناه.

user@gpu2-hc1node:~$ sudo docker logs -f 68e27eb51ee1
2023-12-14T21:30:12.861320Z  INFO text_generation_launcher: Args { model_id: "TheBloke/Upstage-Llama-2-70B-instruct-v2-GPTQ", revision: Some("gptq-4bit-32g-actorder_True"), validation_workers: 2, sharded: Some(true), num_shard: Some(2), quantize: Some(Gptq), speculate: None, dtype: None, trust_remote_code: false, max_concurrent_requests: 128, max_best_of: 2, max_stop_sequences: 4, max_top_n_tokens: 5, max_input_length: 10000, max_total_tokens: 12000, waiting_served_ratio: 1.2, max_batch_prefill_tokens: 12000, max_batch_total_tokens: None, max_waiting_tokens: 20, hostname: "68e27eb51ee1", port: 80, shard_uds_path: "/tmp/text-generation-server", master_addr: "localhost", master_port: 29500, huggingface_hub_cache: Some("/data"), weights_cache_override: None, disable_custom_kernels: false, cuda_memory_fraction: 1.0, rope_scaling: None, rope_factor: Some(2.0), json_output: false, otlp_endpoint: None, cors_allow_origin: [], watermark_gamma: None, watermark_delta: None, ngrok: false, ngrok_authtoken: None, ngrok_edge: None, env: false }
2023-12-14T21:30:12.861350Z  INFO text_generation_launcher: Sharding model on 2 processes
2023-12-14T21:30:12.861441Z  INFO download: text_generation_launcher: Starting download process.
2023-12-14T21:30:19.986231Z  INFO text_generation_launcher: Files are already present on the host. Skipping download.

2023-12-14T21:30:20.771527Z  INFO download: text_generation_launcher: Successfully downloaded weights.
2023-12-14T21:30:20.771941Z  INFO shard-manager: text_generation_launcher: Starting shard rank=1
2023-12-14T21:30:20.771967Z  INFO shard-manager: text_generation_launcher: Starting shard rank=0
2023-12-14T21:30:27.769624Z  WARN text_generation_launcher: Disabling exllama v2 and using v1 instead because there are issues when sharding

2023-12-14T21:30:27.997163Z  WARN text_generation_launcher: Disabling exllama v2 and using v1 instead because there are issues when sharding

2023-12-14T21:30:28.046134Z  WARN text_generation_launcher: Unable to use Flash Attention V2: GPU with CUDA capability 7 5 is not supported for Flash Attention V2

2023-12-14T21:30:28.071687Z  WARN text_generation_launcher: Could not import Mistral model: Mistral model requires flash attn v2

2023-12-14T21:30:28.072298Z  WARN text_generation_launcher: Could not import Mixtral model: Mistral model requires flash attn v2

2023-12-14T21:30:28.241375Z  WARN text_generation_launcher: Unable to use Flash Attention V2: GPU with CUDA capability 7 5 is not supported for Flash Attention V2

2023-12-14T21:30:28.262756Z  WARN text_generation_launcher: Could not import Mistral model: Mistral model requires flash attn v2

2023-12-14T21:30:28.263363Z  WARN text_generation_launcher: Could not import Mixtral model: Mistral model requires flash attn v2

2023-12-14T21:30:30.786133Z  INFO shard-manager: text_generation_launcher: Waiting for shard to be ready... rank=1
2023-12-14T21:30:30.786133Z  INFO shard-manager: text_generation_launcher: Waiting for shard to be ready... rank=0
2023-12-14T21:30:40.348755Z ERROR text_generation_launcher: Error when initializing model
Traceback (most recent call last):
  File "/opt/conda/lib/python3.10/site-packages/text_generation_server/utils/weights.py", line 191, in get_multi_weights_col
    qweight = torch.cat(
torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 112.00 MiB. GPU 0 has a total capacty of 14.76 GiB of which 74.75 MiB is free. Process 19973 has 14.68 GiB memory in use. Of the allocated memory 13.73 GiB is allocated by PyTorch, and 74.36 MiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

nvidia-smi بعد تعطل النموذج.

Thu Dec 14 15:39:55 2023       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.223.02   Driver Version: 470.223.02   CUDA Version: 11.4     |
|-------------------------------+----------------------+----------------------|
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Tesla T4            Off  | 00000000:86:00.0 Off |                    0 |
| N/A   54C    P0    28W /  70W |      0MiB / 15109MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
|   1  Tesla T4            Off  | 00000000:AF:00.0 Off |                    0 |
| N/A   55C    P0    28W /  70W |      0MiB / 15109MiB |      5%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

عندما أقوم بتشغيل النموذج، أرى استخدام وحدة معالجة الرسومات يزداد إلى حوالي 100٪ على كلتا وحدتي معالجة الرسومات، ثم يتعطل.

اثنان من T4 أقل بكثير من اللازم لهذا النموذج. يمكنك تجربة شيء مثل نموذج 7B متوافق مع المطالبات في هذه.

إعجابَين (2)

تمكنت من تشغيل الوضع التالي على T4

sudo docker run --gpus all --shm-size 1g -p 80:80 -v /home/deeznnutz/discourse/data:/data ghcr.io/huggingface/text-generation-inference:1.3 --model-id tiiuae/falcon-7b-instruct --max-batch-prefill-tokens 2048

أنا قادر على اختباره محليًا ويعمل:

curl https://Public_URL/generate     -X POST     -d '{\"inputs\":\"What is Deep Learning?\",\"parameters\":{\"max_new_tokens\":20}}'     -H 'Content-Type: application/json'
{\"generated_text\":\"\\nDeep learning is a branch of machine learning that uses artificial neural networks to learn and make decisions.\"}

ومع ذلك، عندما أحاول تشغيله في Discourse، بهذه الإعدادات

ai summarization discourse service api endpoint: https://URL/generate/
ai summarization discourse service api key: random numbers
summarization strategy: Discourse AI's long-t5-tglobal....-book-summary

أتلقى الخطأ التالي.

Message (6 copies reported)

Job exception: Net::HTTPBadResponse


Backtrace

/var/www/discourse/plugins/discourse-ai/lib/inference/discourse_classifier.rb:13:in `perform!'
/var/www/discourse/plugins/discourse-ai/lib/summarization/strategies/truncate_content.rb:46:in `completion'
/var/www/discourse/plugins/discourse-ai/lib/summarization/strategies/truncate_content.rb:42:in `summarize_with_truncation'
/var/www/discourse/plugins/discourse-ai/lib/summarization/strategies/truncate_content.rb:23:in `summarize'
/var/www/discourse/app/services/topic_summarization.rb:38:in `summarize'
/var/www/discourse/app/jobs/regular/stream_topic_summary.rb:25:in `execute'
/var/www/discourse/app/jobs/base.rb:292:in `block (2 levels) in perform'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rails_multisite-5.0.0/lib/rails_multisite/connection_management.rb:82:in `with_connection'
/var/www/discourse/app/jobs/base.rb:279:in `block in perform'
/var/www/discourse/app/jobs/base.rb:275:in `each'

تحتاج إلى تعيين عنوان URL لهذه الخدمة ضمن ai_hugging_face_api_url

يبدو أن استراتيجيات التلخيص المتاحة لا تدعم النموذج الذي أقوم بتشغيله.

ghcr.io/huggingface/text-generation-inference:1.3 --model-id tiiuae/falcon-7b-instruct

أنا فقط أتساءل إذا قمت بتثبيت وتشغيل خدمة تصنيف السمية، كيف يمكنك إلغاء تنشيطها أو إلغاء تثبيتها بشكل صحيح؟ شكرا