Интересное что-то
520 subscribers
2.72K photos
253 videos
140 files
4.53K links
Материалы и мысли, понадерганные отовсюду
Блог: https://t.me/asisakov_channel
Чат: https://t.me/youknowds_chat
Download Telegram
#паттерны

Введение

Сегодня мы рассмотрим паттерн проектирования "Адаптер".

Классификация

Тип:
Структурный

Определение: Адаптер — это структурный паттерн проектирования, который позволяет объектам с несовместимыми интерфейсами работать вместе.
Адаптер выступает прослойкой между объектами превращая вызовы одного в понятные для другого.

Очень удобно понять адаптер на примере из жизни. Представим человеку который говорит только на французском нужно рассказать историю человеку который понимает только немецкий. Сами понять они друг друга не смогут, поэтому им понадобится переводчик, который переведёт французкий на немецкий. В данном случае переводчик выступит адаптером.

Из чего состоит и как работает паттерн адаптер

1. Клиент. Описывает бизнес логику программы. Работает с адаптером и другими объектами.


adapter = Adapter()
result = adapter.do() + "5"


2. Интерфейс с которым может работать клиентский код.


class Test1:
def do(self) -> str:
return "3"


3. Класс, который имеет нужную клиенту логику, однако клиент не может с ним общаться, так как интерфейс данного класса ему не понятен.


class Test2:
def specific_do(self) -> float:
return 3.4


4. Адаптер - класс который помогает клиенту использовать функционал незнакомого ему сервиса в правильном формате. Реализует клиентский интерфейс. Содержит ссылку на незнакомый сервис. Адаптер при получении вызовов от клиента через клиентский интерфейс и переводит их в вызовы незнакомого сервиса в правильном формате.


class Adapter(Test1, Test2):
def do(self) -> str:
return f"Translated: {round(self.specific_do())}"


Уточнение: Приложение должно использовать объект адаптера только через клиентский интерфейс. Это позволит легко создавать и изменять адаптеры в будущем.

Плюсы данного паттерна

1. Скрывает все "низкоуровневые" преобразования интерфейсов от клиента. Реализует принцип абстракция.

Минусы данного паттерна

Таковых я не обнаружил

Пример и задача

В качестве примера возьмём класс с методом do который возвращает небольшой текст. Также есть класс с методом secret_do который возвращает другую строку, зашифрованную шифром Цезаря со сдвигом 5, которая ещё и полностью развёрнута.

В виде клиента выступает функция которая постит текст в ваш блог.(Можете просто создать функцию которая выводит переданный в неё текст). Естественно она должна принимать только расшифрованный текст.

Реализуйте адаптер для второго класса, который спасёт ваш блог от зашифрованных постов.

Пример из реального кода

https://github.com/aiogram/aiogram/blob/b190bbba1915ed3b7f311a780f34723ebd6b5acd/aiogram/contrib/fsm_storage/redis.py#L280

Вот его объяснение какую задачу решает адаптер в данном случае:

Здесь адаптер дает возможность контроллеру хранилища (RedisStorage) работать с первой версией редиса, т.е. адаптирует aioredis-v1, там еще есть адаптер для aioredis-v2, но он в отличие от первой версии адаптирует только создание клиента редиса


Дополнительные материалы

https://habr.com/ru/post/85095/
Forwarded from Tensor Banana
Запускаем SD 3.5 Large fp8 в comfyUI


Модель в формате fp8 должна влезть в 8GB VRAM. Если у вас меньше - попробуйте варианты в формате gguf, они есть и на 4 гига, но качество будет хуже.

1. Качаем свежий comfyUI https://github.com/comfyanonymous/ComfyUI или обновляем ваш старый (update_comfyui_stable.bat)

2. Качаем 3 клипа (все кроме t5xxl_fp16.safetensors) и кладем в папку /models/clip/: https://huggingface.co/lodestones/stable-diffusion-3-medium/tree/main/text_encoders

3. Скачать саму sd3 в fp8 или gguf формате, пишут, что скорость почти одинаковая. Дефолтная модель в fp16 весит слишком много (16 GB), поэтому я использовал fp8, положил в папку /models/checkpoints/. Гуфы надо класть в папку /models/unet/

fp8 (8GB) https://huggingface.co/matt3ounstable/stable-diffusion-3.5-large-fp8/tree/main
или gguf (4-8 GB) https://huggingface.co/city96/stable-diffusion-3.5-large-gguf/tree/main
(для гуфов нужно установить ноды: "ComfyUI-GGUF", они есть в ComfyUI-Manager. Далее для загрузки модели ипользовать ноду "Unet loader (GGUF)")

4. Качаем vae и кладем в /models/vae/ https://huggingface.co/stabilityai/stable-diffusion-3.5-large/blob/main/vae/diffusion_pytorch_model.safetensors

5. Качаем workflow (картинку) для fp8 и перетаскиваем в браузер в ComfyUI https://github.com/Mozer/comfy_stuff/blob/main/workflows/sd35_large_fp8.png
для гуфов workflow сами измените ноду LoadCheckpoint на Unet loader (GGUF).

6. Проверяем, что нужные модельки выставлены в TripleCLIPLoader, LoadCheckpoint и LoadVAE. Готово.

## Скорость
SD3.5 large FP8:
На 2080Ti-22GB (pcie 3.0 4x, power-limit 80%)
Холодный старт - 75s
1024x1024 20 steps - 42s, 1.61s/it
жрет vram - 21 GB

На 3060-12GB (pcie 3.0 4x, power-limit 80%)
Холодный старт - 91s
1024x1024 20 steps - 75s, 3.20s/it
жрет vram - 11 GB

Скорость Flux-dev-fp8 у меня чуть-чуть медленнее (2080ti, 1024x1024 20 steps - 45s, 1.94s/it)

Если в SD3.5 не менять промпт, и vae вынести на вторую видюху, то полное время на генерацию будет 35s.

SD-3.5-Large-8b тренилась на разрешении до 1 мегапикселя, так что ставить разрешение больше чем 1024х1024 не стоит - будет ухудшение качества. (Flux работает до 2-х мегапикселей). Модель поменьше, SD-3.5-Medium-2.5B, обещают выпустить уже 29 декабря, и в ней обещают разрешение до 2 mpx. Еще есть Large-Turbo модель, генерирует всего за 4 шага, но качество будет хуже, ее не тестил.

Общее впечатление: flux лучше. Он реалистичнее, анатомия лучше, разрешение больше, следование промпту лучше. А тут результат напоминает SDXL. Но, наверняка, для SD3 будут свои файнтюны и лоры, которые улучшат ситуацию и добавят что-то новое, например flux очень дорого файнтюнить (lora - дешево). Текст пишет, но в мелком тексте будут неточности. Пишут, что sd3 лучше чем flux следует заданному художественному стилю. Сам не тестил.

Nsfw - умеет, верх - норм (лучше чем у флакса из коробки), низ - без деталей (+- как у флакса из коробки). Для реализма нужно снизить cfg например до 3.0.

Затестить онлайн https://huggingface.co/spaces/stabilityai/stable-diffusion-3.5-large
Forwarded from Gour
На civitai выложили смешанную модель (Large + Large Turbo) на 8 шагов
https://civitai.com/models/880208/sd-35-fusion-8-steps-merge-full-model-and-lora-version
Как со встроенными энкодерами (полноценный чекпоинт), так и без них (unet), fp8 и fp16

Есть и обычная fp8 сразу с энкодерами https://civitai.com/models/882666?modelVersionId=988061

Ну и там же кванты есть всякие разные https://civitai.com/models/886778?modelVersionId=992647

С civitai, скорость скачивания, возможно, быстрее будет
Тут что-то про долгосрочную память завезли. Снова огромная статья, которую разбирать полноценно некогда, только автоматом. Подкаст и ссылка на ютуб видео там же в канале.
Forwarded from Galqiwi's boredom
Наконец-то закончил работу над большим пет-проектом.

Я смог запустить Llama 3.1-8b прямо в браузере на cpu с помощью нашего нового алгоритма сжатия AQLM+PV.

Можно потестить демо здесь

видео
Forwarded from Quant Researcher
📚3 книги, которые должен освоить каждый квант

Недавно на quant.courses зашел разговор о ключевых книгах, разобравшись в которых можно создать прочную базу для успешного прохождения любого собеседования.

Важно именно разобраться в концептах из книг, а не просто прочитать. Разобраться — это значит прорешать все задачи в конце глав и понять каждую формулу. Благо, сейчас есть ChatGPT; еще 5 лет назад нам приходилось искать другие источники, чтобы разобраться в непонятных моментах из этих книг.

1. Options, Futures, and Other Derivatives, Джон Халл. Библия деривативов. Объемная книга с академической базой, необходимой для работы с производными финансовыми инструментами. Ее плюс в том, что она охватывает и базовые инструменты: акции, облигации и т.д.

2. Trades, Quotes and Prices: Financial Markets Under the Microscope, Жан-Филипп Бушо. Лучшая книга по микроструктуре рынка. Внимание: может вызвать много вопросов по матанализу!

3. Advances in Financial Machine Learning Маркос Лопес де Прадо. Книга о применении машинного обучения в финансах. Примечателен и ее автор, Маркос Лопес де Прадо, редкий случай академика, успешно работающего в хедж-фонде.

Вдумчивый читатель заметит, что в списке нет книг Кирилла Ильинского. Администрация канала считает, что еще никто в мире не смог разобраться в них до конца. Это настоящая библия кванта, которую нужно перечитывать многократно, каждый раз открывая для себя новые уровни смыслов.

Quant Researcher
Forwarded from Варим МЛ
Продолжаем тему LLM - набросал список вопросов и ответов, которые позволят быстро (но не очень глубоко) погрузиться в самые разные темы, связанные с их использованием.

На всякий случай - меня пока сложно назвать опытным ллмщиком, но я создавал этот док как раз в процессе изучения и работы над первыми проектами, так что, может быть, кому и пригодится.

Отдельное спасибо моему коллеге Жене Гутину за ревью.

#Жека #machinelearning #llm