Y a-t-il une raison particulière pour que ces commandes Docker ne soient pas en mode détaché (il manque -d) ?
Si vous voulez dire « Ne devrais-je pas les lancer avec -d ? », la réponse est probablement oui.
Si vous voulez vraiment dire « Pourquoi l’OP ne m’a-t-il pas dit de lancer ces commandes avec -d ? », je pense qu’elles sont destinées à être de simples exemples de la façon dont vous pourriez les démarrer et les faire fonctionner. En pratique, vous voudrez faire d’autres <autres choses> pour les lancer d’une manière qui les rendrait utiles en production.
C’est exactement ma question et vous avez mis le doigt dessus. Cela fait un moment que je n’ai pas configuré mes instances Docker, mais je m’y remets maintenant. Quand vous dites « d’autres choses » que je devrais faire pour les rendre utiles en production, y a-t-il autre chose qui devrait me crier « FAIS ÇA ! » (outre l’évidence de changer le numéro de port du même 6666 dans chacune des instances Docker) ?
OK. Pour les clés d’API séparées par des barres verticales, sont-elles complètement arbitraires comme l’hôte du service et spécifions-nous simplement les clés alphanumériques que nous voulons accepter du client ?
En quoi changer le port est-il moins « évident » que de le faire fonctionner en arrière-plan ?
C’est là le problème. Sans connaître intimement ce que vous considérez comme évident, il est impossible de répondre à la question. La plupart du temps, si vous n’êtes pas à peu près sûr de savoir comment rendre les choses utiles, alors vous avez probablement besoin d’aide que vous ne trouverez pas ici. ![]()
Parce que j’ai exécuté des dizaines de conteneurs Docker par le passé. Je n’ai pas touché à Docker depuis deux ans et je me suis plongé dedans. Ce n’était pas évident au début puisque je n’y avais pas touché depuis un moment, mais cette connaissance fondamentale de base pour utiliser Docker m’est revenue lors de la discussion.
C’est ça le truc. Sans avoir une connaissance intime de ce que vous trouvez évident, il est impossible de répondre à la question. La plupart du temps, si vous n’êtes pas à peu près sûr de savoir comment rendre les choses utiles, alors vous avez probablement besoin d’aide que vous ne pouvez pas obtenir ici.
C’est là le problème, cependant. Parfois, l’évidence n’est pas évidente, même pour ceux qui ont de l’expérience avec différents systèmes Docker comme moi. On pourrait interpréter ce que vous avez dit comme : vous devriez connaître la réponse à la question avant de la poser. Comprenez que certains d’entre nous gèrent des communautés à titre de service bénévole et ne passent pas 24h/24 et 7j/7 à apprendre les détails les plus intimes de Discourse, jusqu’aux structures de données Postgres et autres. J’ai l’impression que vous m’avez fermé la porte et que cela n’a pas été apprécié dans ce qui devrait être un forum communautaire où chacun devrait s’entraider librement et joyeusement.
Pour en venir au fait, j’ai fait quelques recherches sur Google pour essayer de déterminer comment API_KEYS est censé être utilisé et je n’ai pas trouvé grand-chose. Je comprends que je puisse manquer l’évidence et que cela puisse être très frustrant pour un professionnel de Discourse comme vous, avec une connaissance approfondie de la plateforme jusqu’au plus bas niveau, mais j’essaie d’avoir une discussion communautaire ici afin que d’autres puissent en bénéficier également, qui ne sont pas nécessairement à votre niveau de compétence. Après tout, le but est que des personnes autres que les développeurs de Discourse puissent utiliser ce logiciel également.
Je compatis. Tomber sur un service que j’ai en cours d’exécution et avoir peu d’idée de comment je l’ai démarré arrive plus souvent que je ne le voudrais.
C’est vrai. Même les instructions que nous écrivons pour nous-mêmes n’ont pas de sens quand nous en avons besoin.
Désolé. Je n’avais pas l’intention d’être impoli ou méchant, et il semble que je l’ai été. Mon point était simplement qu’il est déjà assez difficile de soutenir les personnes qui exécutent l’installation standard, donc comprendre quelles sont vos compétences, comment vous prévoyez de le lancer, s’il sera sur Internet et si vous savez comment le protéger avec https (vous le voulez probablement si vous pensez le protéger avec des clés API), c’est difficile.
Oui. Si vous mettez cela quelque part où quelqu’un d’autre peut le contacter, je pense que vous voudrez définir cette variable API_KEYS et trouver un moyen de générer quelque chose d’aléatoire pour l’utiliser comme clé. Et ensuite, vous entrerez la même clé dans les paramètres du plugin. C’est ce que j’ai fait. Je n’ai pas vérifié que l’utilisation d’une mauvaise clé le casserait, ce qui, franchement, je pense que j’aurais dû le faire. Peut-être que je le ferai sur l’instance à laquelle je m’apprête à ajouter le plugin.
Mais il serait peut-être plus agréable que l’OP inclue le -d et définisse la variable d’environnement API_KEYS.
le sélecteur d’environnement API_KEYS est un sélecteur facultatif que vous pouvez utiliser si, pour une raison quelconque, vous souhaitez restreindre le service aux clients qui fournissent l’une des clés API_KEYS configurées dans leur en-tête.
Quelque chose dont vous n’avez pas vraiment besoin si vous l’exécutez en interne pour une seule instance, mais qui peut être utile si vous l’exécutez sur Internet ou dans un environnement partagé.
Merci @Falco et @pfaffman pour votre aide et désolé si j’ai déraillé les choses ici ! Votre aide a été grandement appréciée ! ![]()
Est-ce que tous ces services peuvent être utilisés par plusieurs installations de Discourse, ou doivent-ils être exécutés sur une base par site ?
Ils sont tous sûrs à partager entre les instances.
Est-il toujours possible d’utiliser la résumé avec les clés d’API OpenAI ?
Oui, remplissez les clés et choisissez un modèle OpenAI dans le paramètre de résumé.
Il y a un petit problème si ce sujet utilise une autre langue que l’anglais ou une langue mineure — une fois qu’il utilise la bonne langue et soudainement il commence à utiliser l’anglais. Les deux façons de changer de langue semblent se produire de manière totalement aléatoire.
Je teste le point de terminaison de résumé :
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
Cependant, lorsque je l’exécute, j’obtiens l’erreur suivante. Cette machine possède (2) Tesla T4 et aucun autre processus n’accède aux GPU. Voir l’utilisation ci-dessous.
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 après le crash du modèle.
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 |
+-----------------------------------------------------------------------------+
Lorsque je démarre le modèle, je peux voir l’utilisation du GPU augmenter à environ 100 % sur les deux GPU, puis il plante.
Deux T4, c’est beaucoup trop peu pour ce modèle. Vous pouvez essayer quelque chose comme un modèle 7B compatible avec les invites dans ceux-ci.
J’ai réussi à faire fonctionner le mode suivant sur un 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
Je peux le tester localement et cela fonctionne :
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.\"}
Cependant, lorsque j’essaie de l’exécuter dans Discourse, avec ces paramètres
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
J’obtiens l’erreur suivante.
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'
Vous devez définir l’URL de ce service sous ai_hugging_face_api_url
Il semble que les stratégies de résumé disponibles ne prennent pas en charge le modèle que j’exécute.
ghcr.io/huggingface/text-generation-inference:1.3 --model-id tiiuae/falcon-7b-instruct
Je me demande juste si vous installez et exécutez le service de classification de toxicité, comment le désactivez-vous ou le désinstallez-vous correctement ? Merci

