reload_flag=""
if [[ -n "${DEBUG}" ]]; then
reload_flag="--reload"
fi
if [[ -n "${WORKER_COUNT}" ]]; then
workers=${WORKER_COUNT}
else
workers=2
fi
gunicorn --workers ${workers} \
--bind 0.0.0.0:8000 \
${reload_flag} main.wsgi
Писали такие конструкции чтобы проверить наличие флага и сформировать команду правильно?
На самом деле можно сделать тоже самое проще. Для этого используются операторы условной подстановки, доступные в оболочках семейства POSIX.
:- для установки значений по умолчанию
${WORKER_COUNT:-2}
Если переменная не объявлена, то будет дефолтное значение 2.
:+ подставляет указанный текст, если переменная не пуста
${DEBUG:+--reload}
Если что-то есть в переменной то распечатается текст после символа +, в противном случае - ничего. Удобно для опциональных флагов, как в нашем примере.
Итого наш скрипт может выглядеть так:
gunicorn --workers ${WORKER_COUNT:-2} \
--bind 0.0.0.0:8000 \
${DEBUG:+--reload} main.wsgi
Есть еще два оператора.
:= не только подставить дефолтное значение, но и присвоить его переменной, если она пуста
# никаких переменных еще нет
VAL1=${VAL2:=hello}
# теперь доступны обе
echo $VAL1 $VAL2
# hello hello
:? остановить выполнение с ошибкой, если переменной нет.
echo ${MISS:?is required}
bash: MISS: is required
Код выхода будет 1.
#tricks#linux
Поэтому вести борьбу с купцами счастья нужно неустанно и постоянно, как за зарплаты и нормальные условия труда. Победа на этом фронте сулит значительные успехи и на остальных.
Не слушайте игры нарядных дудочников. Думайте. Боритесь. @profcen_bot
#инсайд#мошенничество#mlm#сетевоймаркетинг
⚡️BERT is just a Single Text Diffusion Step
Любопытны пост, где автор объяснил на примере очень простую и очевидную, но мощную идею.
Он заметил, что то, что мы называем диффузией текста, на самом деле - это просто обобщённая версия классического обучения BERT.
Как работаетBERT?
В BERT модель берёт текст и маскирует часть слов, а потом учится угадывать, какие слова были скрыты.
В диффузии происходит почти то же самое, только шагов больше: на каждом шаге модель немного «портит» текст (добавляет шум), а затем восстанавливает его, всё меньше и меньше теряя смысл, пока не соберёт финальный чистый текст.
То есть BERT делает один шаг очистки - угадывает замаскированные слова.
А диффузионная модель делает много таких шагов подряд, постепенно превращая случайный набор токенов в осмысленный текст.
Барри дообучил RoBERTa, чтобы показать это на практике - и получил настоящий текстовый диффузионный генератор.
В примере:
- Используется RoBER (улучшенная версия модели BERT,) и датасет WikiText.
- На каждом шаге часть токенов заменяется на <MASK>,
модель восстанавливает их, потом снова маскирует — и так несколько раз.
- После нескольких итераций модель способна генерировать связный текст,
даже без автогенеративного декодера (как у GPT).
📈Результаты
- Модель генерирует осмысленный текст, хотя и не идеально связный.
- Качество улучшалось по мере добавления шагов диффузии.
- По времени генерации RoBERTa Diffusion была немного медленнее, чем GPT-2 (~13 сек против 9 сек), но архитектура осталась полностью encoder-only.
Автор упоминает, что позже наткнулся на работу DiffusionBERT, где идею реализовали глубже и подтвердили результатами.
Главная мысль:
BERT можно считать одноступенчатой версией текстовой диффузии.
Если добавить больше шагов, то vs получаем диффузионный генератор текста.
Если BERT - это один шаг диффузии, то будущее может принадлежать моделям, совмещающим "понимание" и "генерацию" текста в одном процессе.
https://nathan.rs/posts/roberta-diffusion/
@ai_machinelearning_big_data
#AI#Diffusion#RoBERTa#BERT#LanguageModel#MLM#Research