C’è un motivo particolare per cui questi comandi Docker non sono in modalità detached (manca -d)?
Se intendi “Non dovrei lanciarli con -d?” La risposta è probabilmente sì.
Se intendi davvero “Perché l’OP non mi ha detto di lanciare questi comandi con -d?”, penso che siano intesi solo come esempi di come potresti avviarle e farle funzionare. In pratica, vorrai fare altro \u003cother stuff\u003e per lanciarle in un modo che le renda utili in produzione.
È esattamente la mia domanda e hai colto nel segno. È passato un po’ di tempo da quando ho configurato le mie istanze Docker, ma ci sto tornando ora. Quando dici “altre cose” che dovrei fare per renderle utili per la produzione, c’è qualcos’altro che dovrebbe urlarmi “FALLO!” (oltre all’ovvio di cambiare il numero di porta dallo stesso 6666 in ciascuna delle istanze docker)?
OK. Quindi per le chiavi API separate da pipe, sono completamente arbitrarie come host del servizio e specifichiamo semplicemente le chiavi alfanumeriche che vogliamo accettare dal client?
In che modo la modifica della porta è meno “ovvia” dell’esecuzione in background?
Questa è la questione. Senza una conoscenza approfondita di ciò che ritieni ovvio, è impossibile rispondere alla domanda. Per lo più, se non sei abbastanza sicuro di sapere come rendere utile la cosa, allora probabilmente hai bisogno di un aiuto che non puoi ottenere qui. ![]()
Perché ho eseguito dozzine di container Docker in passato. Non ho toccato Docker negli ultimi due anni e mi sono immerso a fondo. Non è stato ovvio all’inizio poiché non lo toccavo da un po’ di tempo, ma questa conoscenza fondamentale di base per l’utilizzo di Docker è tornata con la discussione.
Questa è la cosa. Senza avere una conoscenza intima di ciò che ritieni ovvio, è impossibile rispondere alla domanda. Per lo più, se non sei abbastanza sicuro di sapere come rendere utile la cosa, allora probabilmente hai bisogno di un aiuto che non puoi ottenere qui.
Questo è il problema, però. A volte, l’ovvio non è ovvio nemmeno per coloro che hanno esperienza con diversi sistemi Docker come me. Si potrebbe interpretare ciò che hai detto come: dovresti conoscere la risposta alla domanda prima di porla. Comprendi che alcuni di noi gestiscono comunità come servizio di volontariato e non passano 24 ore su 24, 7 giorni su 7, ad apprendere i dettagli più intimi di Discourse fino alle strutture dati di Postgres e simili. Sento che mi stavi bloccando e questo non è stato apprezzato in quello che dovrebbe essere un forum della comunità in cui tutti dovrebbero aiutarsi liberamente e felicemente a vicenda.
Per arrivare al punto, ho fatto alcune ricerche su Google per cercare di accertare come API_KEYS dovrebbe essere utilizzato e non ho trovato nulla. Capisco che potrei perdermi l’ovvio e che ciò potrebbe essere decisamente frustrante per un professionista di Discourse come te con una vasta conoscenza della piattaforma fino al livello più basso, ma sto cercando di avere una discussione comunitaria qui in modo che anche altri che non sono necessariamente al tuo livello di abilità possano beneficiare. Dopotutto, il punto è che anche persone diverse dagli sviluppatori di Discourse possano utilizzare questo software.
Capisco il tuo problema. Imbattersi in qualche servizio che ho in esecuzione e avere poca idea di come l’ho avviato succede più spesso di quanto vorrei.
Giusto. Anche le istruzioni che scriviamo per noi stessi non hanno senso quando ne abbiamo bisogno.
Mi dispiace. Non intendevo essere scortese o cattivo, e sembra che lo sia stato. Il mio punto era solo che è già abbastanza difficile supportare le persone che utilizzano l’installazione standard, quindi capire quali sono le tue competenze, come hai intenzione di avviarlo, se sarà su Internet e se sai come proteggerlo con https (probabilmente sì, se pensi di proteggerlo con chiavi API) è difficile.
Sì. Se stai mettendo questo da qualche parte a cui qualcun altro può accedere, penso che vorrai definire quella variabile API_KEYS e trovare un modo per generare qualcosa di casuale da usare come chiave. E poi inserirai la stessa chiave nelle impostazioni del plugin. È quello che ho fatto. Non ho verificato che l’uso della chiave sbagliata lo avrebbe interrotto, cosa che, onestamente, penso avrei dovuto fare. Forse lo farò sull’istanza a cui sto per aggiungere il plugin.
Ma potrebbe essere meglio se l’OP includesse il -d e impostasse la variabile d’ambiente API_KEYS.
la manopola dell’ambiente API_KEYS è una opzionale che puoi usare se, per qualsiasi motivo, vuoi limitare il servizio solo ai client che forniscono una delle API_KEYS configurate nel loro header.
Qualcosa di cui non hai veramente bisogno se lo esegui internamente per una singola istanza, ma che può essere utile se lo esegui su Internet o in un ambiente condiviso.
Grazie @Falco e @pfaffman per il vostro aiuto e scusate se ho deviato la conversazione! Il vostro aiuto è stato molto apprezzato! ![]()
Tutti questi servizi possono essere utilizzati da più installazioni di Discourse o devono essere eseguiti per sito?
Sono tutti sicuri da condividere tra le istanze.
È ancora possibile utilizzare la riassunzione con le chiavi API di OpenAI?
Sì, inserisci le chiavi e scegli un modello OpenAI nelle impostazioni di riepilogo.
C’è un piccolo problema se l’argomento utilizza una lingua diversa dall’inglese o una lingua minore: una volta utilizza la lingua corretta e improvvisamente inizia a utilizzare l’inglese. In entrambi i casi, il cambio di lingua sembra avvenire in modo totalmente casuale.
Sto testando l’endpoint di riepilogo:
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
Tuttavia, quando lo eseguo, ricevo il seguente errore. Questa macchina ha (2) Tesla T4 e nessun altro processo sta accedendo alle GPU. Vedi l’utilizzo di seguito.
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 dopo che il modello si è bloccato.
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 |
+-----------------------------------------------------------------------------+
Quando avvio il modello, vedo l’utilizzo della GPU aumentare a circa il 100% su entrambe le GPU, e poi si blocca.
Due T4 sono troppo pochi per quel modello. Puoi provare qualcosa come un modello compatibile da 7B in quelli.
Sono riuscito a far funzionare la seguente modalità su 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
Sono in grado di testarlo localmente e funziona:
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.\"}
Tuttavia, quando provo a eseguirlo in Discourse, con queste impostazioni
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
Ricevo il seguente errore.
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'
Devi impostare l’URL di quel servizio sotto ai_hugging_face_api_url
Sembra che le strategie di riepilogo disponibili non supportino il modello che sto eseguendo.
ghcr.io/huggingface/text-generation-inference:1.3 --model-id tiiuae/falcon-7b-instruct
Mi stavo solo chiedendo se si installa ed esegue il servizio di classificazione della tossicità, come si disattiva o si disinstalla correttamente? Grazie

