Есть ли какая-то особая причина, по которой эти команды Docker не запущены в отключённом режиме (отсутствует -d)?
Если вы имеете в виду «Разве не следует запускать их с флагом -d?», то ответ, скорее всего, да.
Если же вы действительно спрашиваете «Почему автор не сказал мне запускать эти команды с флагом -d?», то, по-видимому, они приведены лишь как примеры того, как можно их запустить и заставить работать в принципе. На практике вам потребуется выполнить ещё <что-то ещё>, чтобы запустить их так, чтобы они были полезны в рабочей среде.
Это именно мой вопрос, и вы попали прямо в точку. Прошло уже довольно много времени с тех пор, как я настраивал свои экземпляры Docker, но сейчас всё возвращается. Когда вы говорите «другие вещи», которые мне следует сделать, чтобы они были пригодны для production, есть ли что-то ещё, что должно кричать мне «СДЕЛАЙ ЭТО!» (кроме очевидного изменения номера порта с одинакового 6666 в каждом из экземпляров Docker)?
Хорошо. Что касается ключей API, разделенных вертикальной чертой, являются ли они полностью произвольными, как и хост сервиса, и просто ли мы указываем любой буквенно-цифровой ключ (или ключи), которые хотим принимать от клиента?
В чём изменение порта менее «очевидно», чем запуск в фоновом режиме?
Вот в чём дело. Без глубокого понимания того, что вы считаете очевидным, невозможно ответить на вопрос. В большинстве случаев, если вы не уверены, что знаете, как сделать эти вещи полезными, вам, вероятно, понадобится помощь, которую здесь получить нельзя. ![]()
Потому что я запускал десятки контейнеров Docker в прошлом. Просто я не касался Docker последние два года и не погружался в него глубоко. Сначала это не казалось очевидным, так как я давно не работал с ним, но эти базовые фундаментальные знания по использованию Docker вернулись после обсуждения.
Вот в чём дело. Без глубокого понимания того, что вы считаете очевидным, невозможно ответить на вопрос. В основном, если вы не уверены, что знаете, как сделать эти вещи полезными, то вам, вероятно, нужна помощь, которую вы не можете получить здесь.
Вот и загвоздка. Иногда очевидное не является очевидным даже для тех, кто имеет опыт работы с различными системами Docker, как я. Можно интерпретировать ваши слова так: вы должны знать ответ на вопрос ещё до того, как зададите его. Поймите, что некоторые из нас управляют сообществами на волонтёрской основе и не проводят 24/7, изучая самые тонкие детали Discourse, вплоть до структур данных Postgres и тому подобного. Мне кажется, что вы меня просто «закрыли», и это не было оценено в том, что должно быть форумом сообщества, где все должны свободно и с радостью помогать друг другу.
Суть в следующем: я поискал в Google, чтобы понять, как должен использоваться API_KEYS, но не нашёл ответа. Я понимаю, что могу упускать очевидное, и это может быть крайне разочаровывающим для профессионала Discourse, такого как вы, с глубокими знаниями платформы до самого низкого уровня, но я пытаюсь завести обсуждение в сообществе, чтобы другие тоже могли извлечь из этого пользу, кто ещё не достиг вашего уровня навыков. В конце концов, цель состоит в том, чтобы это программное обеспечение могли использовать не только разработчики Discourse.
Я понимаю твою боль. Столкнуться с каким-то сервисом, который я запускал, и почти не помнить, как я его запустил, случается чаще, чем мне бы хотелось.
Верно. Даже инструкции, которые мы пишем для себя, теряют смысл, когда они нам нужны.
Извини. Я не хотел быть грубым или неприятным, но, похоже, так и вышло. Моя мысль была в том, что достаточно сложно поддерживать людей, использующих стандартную установку, поэтому выяснить, каковы твои навыки, как ты планируешь запустить систему, будет ли она доступна в открытом интернете и знаешь ли ты, как защитить её с помощью HTTPS (а ты, вероятно, знаешь, если думаешь, что защищаешь её с помощью ключей API), — это непросто.
Да. Если ты размещаешь это где-то, где кто-то другой может подключиться к нему, думаю, тебе стоит определить переменную API_KEYS и найти способ сгенерировать что-то случайное для использования в качестве ключа. Затем ты введёшь тот же ключ в настройках плагина. Именно так поступил я. Я не проверил, что использование неверного ключа приведёт к сбою, хотя, честно говоря, мне следовало бы это сделать. Возможно, я проверю это на экземпляре, куда собираюсь добавить плагин.
Но было бы лучше, если бы автор темы указал флаг -d и установил переменную окружения API_KEYS.
Переменная окружения API_KEYS является опциональной. Её можно использовать, если по какой-либо причине вы хотите ограничить сервис только теми клиентами, которые предоставляют один из настроенных ключей API_KEYS в заголовке своего запроса.
Это не обязательно, если вы запускаете сервис локально для одного экземпляра, но может оказаться полезным при работе через интернет или в общей среде.
Спасибо @Falco и @pfaffman за вашу помощь и извините, если я увёл обсуждение в сторону! Помощь обоих из вас очень ценится! ![]()
Могут ли все эти сервисы использоваться несколькими установками Discourse или их следует запускать для каждого сайта отдельно?
Все они безопасны для совместного использования между экземплярами.
Возможно ли по-прежнему использовать Summarization с ключами API OpenAI?
Да, заполните ключи и выберите модель OpenAI в настройках суммирования.
Есть одна небольшая проблема: если тема написана на другом языке, отличном от английского или менее распространённом, то иногда используется правильный язык, а затем внезапно начинается использование английского. В обоих случаях смена языка происходит совершенно случайно.
Я тестирую конечную точку суммаризации:
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, и другие процессы не используют GPU. См. использование ниже.
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 |
+-----------------------------------------------------------------------------+
При запуске модели я вижу, что использование GPU возрастает примерно до 100% на обоих GPU, а затем происходит сбой.
Двух T4 явно недостаточно для этой модели. Вы можете попробовать что-то вроде 7B-модели, совместимой с промптами, на таком оборудовании.
Мне удалось запустить следующую модель на 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":"Что такое глубокое обучение?","parameters":{"max_new_tokens":20}}' -H 'Content-Type: application/json'
{"generated_text":"\nГлубокое обучение — это раздел машинного обучения, который использует искусственные нейронные сети для обучения и принятия решений."}
Однако при попытке запустить его в Discourse с этими настройками
ai summarization discourse service api endpoint: https://URL/generate/
ai summarization discourse service api key: случайные числа
summarization strategy: Discourse AI's long-t5-tglobal....-book-summary
я получаю следующую ошибку.
Сообщение (6 копий)
Исключение в задаче: Net::HTTPBadResponse
Трассировка стека
/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
Меня просто интересует, как деактивировать или правильно удалить сервис классификации токсичности, если вы его установили и запустили? Спасибо.

