12 Рекомендаций для уменьшения задержки при передачи данных по сети
1. Используйте индекс базы данных для уменьшения времени доступа
2. Сжимайте передаваемые данные для сокращения времени передачи данных
3. Группируйте запросы для уменьшения сетевого трафика
4. Используйте HTTP 2 для отправки запросов параллельно через мультиплексирование
5. Используйте CDN для хранения данных ближе к пользователям и уменьшайте время запроса
6. Сократите внешние зависимости для минимизации ненужных сетевых вызовов
7. Добавьте балансировщик нагрузки для равномерного распределения трафика и уменьшите нагрузку на серверы
8. Используйте вертикальное масштабирование приложения - применяйте оперативную память и жесткие диски/SSD с более лучшими показателями для более быстрого времени обработки
9. Используйте очередь сообщений для выполнения интенсивных вычислительных задач в фоновом режиме
10. Используйте кеш в памяти для обслуживания популярных данных вместо опроса базы данных
11. Используйте пул соединений для баз данных и сетей, чтобы избежать перегруза при подключении к базе данных
12. Используйте эффективный формат сериализации данных, например, protobuf, чтобы уменьшить время обработки
1. Используйте индекс базы данных для уменьшения времени доступа
2. Сжимайте передаваемые данные для сокращения времени передачи данных
3. Группируйте запросы для уменьшения сетевого трафика
4. Используйте HTTP 2 для отправки запросов параллельно через мультиплексирование
5. Используйте CDN для хранения данных ближе к пользователям и уменьшайте время запроса
6. Сократите внешние зависимости для минимизации ненужных сетевых вызовов
7. Добавьте балансировщик нагрузки для равномерного распределения трафика и уменьшите нагрузку на серверы
8. Используйте вертикальное масштабирование приложения - применяйте оперативную память и жесткие диски/SSD с более лучшими показателями для более быстрого времени обработки
9. Используйте очередь сообщений для выполнения интенсивных вычислительных задач в фоновом режиме
10. Используйте кеш в памяти для обслуживания популярных данных вместо опроса базы данных
11. Используйте пул соединений для баз данных и сетей, чтобы избежать перегруза при подключении к базе данных
12. Используйте эффективный формат сериализации данных, например, protobuf, чтобы уменьшить время обработки
👍11🥰1👏1
Как работают большие модели LLM. Общий процесс:
Шаг 1) Изучение больших объемов текстовых данных
LLM тренируются на огромных наборах данных (книги, веб-сайты и код), чтобы распознавать закономерности и связи между словами. Этот текст очищается и разбивается на токены — небольшие фрагменты, которые может обработать машина.
Шаг 2) Обучение модели
Используя технику глубокого обучения - трансформеры (transformer), LLM анализируют контекстные связи между словами. Они совершенствуются со временем, корректируя свои внутренние настройки (веса) с помощью градиентного спуска — процесса проб и ошибок, который минимизирует ошибки.
Шаг 3) Тонкая настройка для специальных задач
После обучения LLM настраиваются под конкретные приложения, такие как кодинг или поддержка клиентов. Это делается с помощью контролируемого обучения (supervised learning), обучения с подкреплением (Reinforcement Learning) на основе обратной связи с человеком (RLHF) или адаптации с низким рангом (LoRA) для повышения точности.
Шаг 4) Формирование ответов
При вводе запроса LLM обрабатывает ввод, предсказывает наиболее вероятные следующие токены и генерирует ответ. Для повышения точности и релевантности некоторые модели перед генерацией ответа используют RAG-генерацию (Retrieval-Augmented Generation) с поиском внешних источников информации (например, базы данных или документы), чтобы предоставить более фактические ответы. Затем для уточнения окончательного вывода LLM применяет стратегии декодирования, такие как лучевой поиск (beam search) и выборка ядра (nucleus sampling).
Шаг 5) Фильтрация и оптимизация
Перед развертыванием LLM проходят через фильтры безопасности для удаления предвзятостого и вредоносного контента. Они также оптимизируются с использованием таких методов, как квантизация и обрезка, что делает их эффективными для облачного и локальных ИИ.
Какие существуют проблемы?
LLM сталкиваются с такими проблемами, как галлюцинации (ложные результаты), предвзятость и высокие вычислительные затраты. Инженеры оптимизируют их с помощью RAG, спекулятивного декодирования, гибридного развертывания в облаке и других решений.
Шаг 1) Изучение больших объемов текстовых данных
LLM тренируются на огромных наборах данных (книги, веб-сайты и код), чтобы распознавать закономерности и связи между словами. Этот текст очищается и разбивается на токены — небольшие фрагменты, которые может обработать машина.
Шаг 2) Обучение модели
Используя технику глубокого обучения - трансформеры (transformer), LLM анализируют контекстные связи между словами. Они совершенствуются со временем, корректируя свои внутренние настройки (веса) с помощью градиентного спуска — процесса проб и ошибок, который минимизирует ошибки.
Шаг 3) Тонкая настройка для специальных задач
После обучения LLM настраиваются под конкретные приложения, такие как кодинг или поддержка клиентов. Это делается с помощью контролируемого обучения (supervised learning), обучения с подкреплением (Reinforcement Learning) на основе обратной связи с человеком (RLHF) или адаптации с низким рангом (LoRA) для повышения точности.
Шаг 4) Формирование ответов
При вводе запроса LLM обрабатывает ввод, предсказывает наиболее вероятные следующие токены и генерирует ответ. Для повышения точности и релевантности некоторые модели перед генерацией ответа используют RAG-генерацию (Retrieval-Augmented Generation) с поиском внешних источников информации (например, базы данных или документы), чтобы предоставить более фактические ответы. Затем для уточнения окончательного вывода LLM применяет стратегии декодирования, такие как лучевой поиск (beam search) и выборка ядра (nucleus sampling).
Шаг 5) Фильтрация и оптимизация
Перед развертыванием LLM проходят через фильтры безопасности для удаления предвзятостого и вредоносного контента. Они также оптимизируются с использованием таких методов, как квантизация и обрезка, что делает их эффективными для облачного и локальных ИИ.
Какие существуют проблемы?
LLM сталкиваются с такими проблемами, как галлюцинации (ложные результаты), предвзятость и высокие вычислительные затраты. Инженеры оптимизируют их с помощью RAG, спекулятивного декодирования, гибридного развертывания в облаке и других решений.
👍14🥰1👏1
Вышла новая версия проекта LLVM и компилятора Clang - LLVM 20/ Clang 20
LLVM/Clang 20 — это новейший полугодовой релиз популярного стека компиляторов с открытым исходным кодом, который широко используется многими различными поставщиками для различных целей: от традиционной компиляции C/C++ до интенсивного использования для вычислительных стеков GPU, растущего использования ИИ с MLIR и многого другого.
В новой версии LLVM/Clang 20 добавлена поддержка ряда расширений, в частности, AMX-AVX512, AMX-FP8, AVX10.2, AMD GFX950 и т.д. Добавлен фреймворк для сбора телеметрии, новый современный компилятор Fortran теперь доступен через команду flang и т.д. В Clang добавлен ряд возможностей последних стандартов C и C++.
Подробнее все изменения по Clang: https://releases.llvm.org/20.1.0/tools/clang/docs/ReleaseNotes.html
https://github.com/llvm/llvm-project/releases/tag/llvmorg-20.1.0
LLVM/Clang 20 — это новейший полугодовой релиз популярного стека компиляторов с открытым исходным кодом, который широко используется многими различными поставщиками для различных целей: от традиционной компиляции C/C++ до интенсивного использования для вычислительных стеков GPU, растущего использования ИИ с MLIR и многого другого.
В новой версии LLVM/Clang 20 добавлена поддержка ряда расширений, в частности, AMX-AVX512, AMX-FP8, AVX10.2, AMD GFX950 и т.д. Добавлен фреймворк для сбора телеметрии, новый современный компилятор Fortran теперь доступен через команду flang и т.д. В Clang добавлен ряд возможностей последних стандартов C и C++.
Подробнее все изменения по Clang: https://releases.llvm.org/20.1.0/tools/clang/docs/ReleaseNotes.html
https://github.com/llvm/llvm-project/releases/tag/llvmorg-20.1.0
GitHub
Release LLVM 20.1.0 · llvm/llvm-project
LLVM 20.1.0 Release
A note on binaries
Volunteers make binaries for the LLVM project, which will be uploaded
when they have had time to test and build these binaries. They might
not be available di...
A note on binaries
Volunteers make binaries for the LLVM project, which will be uploaded
when they have had time to test and build these binaries. They might
not be available di...
👍8🔥2👏1🤮1
12 распространеных структур данных
1. Массив
- Набор элементов фиксированного размера, хранящийся в непрерывной памяти.
- Обеспечивает доступ O(1) на основе индекса
2. Матрица (двухмерный массив)
- Многомерный массив, используемый для представления сеток, графиков и задач динамического программирования.
3. Связный список
- Динамическая структура данных, в которой элементы (узлы) связаны посредством указателей.
- Типы: односвязный список, двусвязный список, кольцевой связный список.
4. Стек
- Структура данных «последним пришел — первым ушел» (Last-In-First-Out / LIFO), в которой элемент, добавленный последним, удаляется первым.
- Поддерживает операции push, pop и peek за время O(1).
5. Очередь
- Структура данных «первым пришел — первым вышел» ( First-In-First-Out / FIFO).
- Позволяет вставлять в конец очереди (помещать в очередь) и удалять из начала очереди (вынимать из очереди) за время O(1).
- Используется для обработки элементов в том же порядке, в котором они добавляются.
6. Хешкарта(словарь)
- Структура данных «ключ-значение», использующая хеш-функцию для быстрого поиска.
- Обеспечивает среднее время вставки/удаления/поиска O(1), O(N) (в худшем случае из-за коллизий)
7. Дерево
- Иерархическая структура данных с корневым узлом и дочерними узлами.
- Типы: двоичное дерево, N-арное дерево, AVL-дерево, красно-черное дерево (Red-Black Tree)
8. Бинарное дерево поиска (𝐁𝐢𝐧𝐚𝐫𝐲 𝐒𝐞𝐚𝐫𝐜𝐡 𝐓𝐫𝐞𝐞 / 𝐁𝐒𝐓)
- Особый тип деревьев, где имеется отношение левый узел < кореневой узел < правый узел
- Позволяет выполнять поиск, вставку и удаление со скоростью O log N) в сбалансированных BST.
9. Очередь приоритетов / куча
- Структура на основе двоичного дерева, в которой родительский элемент всегда больше (максимальная куча) или меньше (минимальная куча), чем его дочерние элементы.
- Обеспечивает O(log N) вставки/удаления и O(1) получения минимума/максимума.
10. 𝐓𝐫𝐢𝐞
- Древовидная структура, используемая для быстрого поиска строк.
- Обеспечивает время O(M) для вставки/поискп/удаления, где M — длина строки.
11. Граф
- Совокупность узлов (вершин), соединенных ребрами.
- Для представленя применяются список смежности (Adjacency List) или матрица смежности (Adjacency Matrix)
- Типы: направленные, ненаправленные, взвешенные, невзвешенные.
12. 𝐔𝐧𝐢𝐨𝐧-𝐅𝐢𝐧𝐝 (𝐃𝐢𝐬𝐣𝐨𝐢𝐧𝐭 𝐒𝐞𝐭)
- A data structure used for efficiently handling dynamic connectivity.
- Supports Union(x, y) and Find(x) in nearly O(1) time (with path compression).
- Useful in detecting cycles and finding connected components in a graph.
12. 𝐔𝐧𝐢𝐨𝐧-𝐅𝐢𝐧𝐝 (𝐃𝐢𝐬𝐣𝐨𝐢𝐧𝐭 𝐒𝐞𝐭)
- Структура данных, используемая для эффективной обработки динамических подключений.
- Поддерживает операции Union(x, y) и Find(x) за время, почти равное O (1) время (со сжатием пути).
- Полезен для обнаружения циклов и поиска связанных компонентов в графе.
1. Массив
- Набор элементов фиксированного размера, хранящийся в непрерывной памяти.
- Обеспечивает доступ O(1) на основе индекса
2. Матрица (двухмерный массив)
- Многомерный массив, используемый для представления сеток, графиков и задач динамического программирования.
3. Связный список
- Динамическая структура данных, в которой элементы (узлы) связаны посредством указателей.
- Типы: односвязный список, двусвязный список, кольцевой связный список.
4. Стек
- Структура данных «последним пришел — первым ушел» (Last-In-First-Out / LIFO), в которой элемент, добавленный последним, удаляется первым.
- Поддерживает операции push, pop и peek за время O(1).
5. Очередь
- Структура данных «первым пришел — первым вышел» ( First-In-First-Out / FIFO).
- Позволяет вставлять в конец очереди (помещать в очередь) и удалять из начала очереди (вынимать из очереди) за время O(1).
- Используется для обработки элементов в том же порядке, в котором они добавляются.
6. Хешкарта(словарь)
- Структура данных «ключ-значение», использующая хеш-функцию для быстрого поиска.
- Обеспечивает среднее время вставки/удаления/поиска O(1), O(N) (в худшем случае из-за коллизий)
7. Дерево
- Иерархическая структура данных с корневым узлом и дочерними узлами.
- Типы: двоичное дерево, N-арное дерево, AVL-дерево, красно-черное дерево (Red-Black Tree)
8. Бинарное дерево поиска (𝐁𝐢𝐧𝐚𝐫𝐲 𝐒𝐞𝐚𝐫𝐜𝐡 𝐓𝐫𝐞𝐞 / 𝐁𝐒𝐓)
- Особый тип деревьев, где имеется отношение левый узел < кореневой узел < правый узел
- Позволяет выполнять поиск, вставку и удаление со скоростью O log N) в сбалансированных BST.
9. Очередь приоритетов / куча
- Структура на основе двоичного дерева, в которой родительский элемент всегда больше (максимальная куча) или меньше (минимальная куча), чем его дочерние элементы.
- Обеспечивает O(log N) вставки/удаления и O(1) получения минимума/максимума.
10. 𝐓𝐫𝐢𝐞
- Древовидная структура, используемая для быстрого поиска строк.
- Обеспечивает время O(M) для вставки/поискп/удаления, где M — длина строки.
11. Граф
- Совокупность узлов (вершин), соединенных ребрами.
- Для представленя применяются список смежности (Adjacency List) или матрица смежности (Adjacency Matrix)
- Типы: направленные, ненаправленные, взвешенные, невзвешенные.
12. 𝐔𝐧𝐢𝐨𝐧-𝐅𝐢𝐧𝐝 (𝐃𝐢𝐬𝐣𝐨𝐢𝐧𝐭 𝐒𝐞𝐭)
- A data structure used for efficiently handling dynamic connectivity.
- Supports Union(x, y) and Find(x) in nearly O(1) time (with path compression).
- Useful in detecting cycles and finding connected components in a graph.
12. 𝐔𝐧𝐢𝐨𝐧-𝐅𝐢𝐧𝐝 (𝐃𝐢𝐬𝐣𝐨𝐢𝐧𝐭 𝐒𝐞𝐭)
- Структура данных, используемая для эффективной обработки динамических подключений.
- Поддерживает операции Union(x, y) и Find(x) за время, почти равное O (1) время (со сжатием пути).
- Полезен для обнаружения циклов и поиска связанных компонентов в графе.
❤14👍7👏1😐1
Microsoft добавил в .NET новый тип проекта - .NET AI Chat Template (пока в Preview-версии), который разработан, чтобы быстро создать приложение чата на базе ИИ. Этот начальный выпуск базируется на веб-приложении на базе Blazor, созданном с использованием абстракций Microsoft.Extensions.AI и Microsoft.Extensions.VectorData. Шаблон использует шаблон Retrieval Augmented Generation (RAG), который обычно используется для приложений чата.
Шаблон нового проекта доступен как через .NET CLI, так и в Visual Studio
https://devblogs.microsoft.com/dotnet/announcing-dotnet-ai-template-preview1/
Шаблон нового проекта доступен как через .NET CLI, так и в Visual Studio
https://devblogs.microsoft.com/dotnet/announcing-dotnet-ai-template-preview1/
🤯8👍4👏2🔥1🤬1😢1🤡1
В руководство по языку Python добавлена статья про Установку пакетов, пакетный менеджер pip и виртуальную среду
https://metanit.com/python/tutorial/6.8.php
#python
https://metanit.com/python/tutorial/6.8.php
#python
Metanit
Python | Установка пакетов, pip и виртуальная среда
Установка пакетов в проекте на языке программирования Python, пакетный менеджер pip, управление пакетами, виртуальная среда venv, создание и активация виртуальной среды, пример установки и использования пакета matplotlib
🔥12👍4❤🔥2
Google добавил приложение Linux Terminal в состав мартовского обновления Android 15 ("Pixel Feature Drop") для устройств Google Pixel. Приложение позволяет запустить в окружении Android виртуальную машину с Debian GNU/Linux, в которой можно выполнять обычные Linux-приложения.
Активация Linux Terminal производится в настройках для разработчиков (секция "Settings > System > Developer > Linux development environment"). Для появления данной опции необходимо активировать режим разработчика, быстро нажав семь раз на номере сборки на странице "Settings → About Phone". После первого запуска приложение предлагает загрузить на устройство образ виртуальной машины c Linux, который занимает около 500 МБ.
https://www.androidpolice.com/android-15-linux-terminal-app/
Активация Linux Terminal производится в настройках для разработчиков (секция "Settings > System > Developer > Linux development environment"). Для появления данной опции необходимо активировать режим разработчика, быстро нажав семь раз на номере сборки на странице "Settings → About Phone". После первого запуска приложение предлагает загрузить на устройство образ виртуальной машины c Linux, который занимает около 500 МБ.
https://www.androidpolice.com/android-15-linux-terminal-app/
❤24🔥6🍾2🤡1