Pull to refresh
16K+
38

User

47
Rating
17
Subscribers
Send message

Выше в комментарии написали:

В Сетуни не было никакой "естественной троичности", а как раз одни костыли. Один трит кодировался сдвоенной ДВОИЧНОЙ ячейкой, то есть 2 бита на трит, одно состояние из 4-х - запрещённое.

Дипсик пошуршал в интернете:

В машине ЛЭМ-1 (1954 г.) под руководством Льва Гутенмахера использовались двоичные феррит-диодные ячейки. Это были электромагнитные бесконтактные реле на магнитных усилителях. Ключевая деталь: для хранения одного бита использовалась пара ферритовых сердечников — рабочий и компенсационный. Компенсационный сердечник гасил гистерезис рабочего, чтобы тот мог надёжно переключаться между двумя состояниями (0 и 1).

Решение Брусенцова: заставить компенсационный сердечник работать:

"Главное, что я увидел: они используют пару сердечников под каждый бит — рабочий и компенсационный. И мне пришла в голову идея: а что, если заставить компенсационный сердечник работать. Тогда каждая ячейка становится трёхзначной"

Источник: Троичные феррит-диодные цифровые элементы единственной.. | Setun-1958 (Троичный компьютер "Сетунь") | ВКонтакте
Ферритовый куб на основе ячеек Гутенмахера, источник фото: https://habr.com/ru/companies/ua-hosting/articles/273929/
Ферритовый куб на основе ячеек Гутенмахера, источник фото: https://habr.com/ru/companies/ua-hosting/articles/273929/

Еще интересная ссылка: МЭВМ "Сетунь" цифровые элементы на ферритах - nedoPC.org

Т.е. всё таки настоящий трит?

Зачем обучать нейронку на смартфоне? Можно попробовать перенести движок для инференса на андроид.

Как я и написал в статье, не все слои переводятся на низкобитный формат. И по вашей ссылке говорится то же самое:

  • Targeted 2-bit quantization: We heavily compressed (to 2-bit) the specific parts of the model that generate tokens, while keeping the core reasoning layers at higher precision. This saves storage without making the model less smart.

Перевод:

Целевая 2-битная квантизация: мы подвергли сильному сжатию (до 2 бит) конкретные части модели, отвечающие за генерацию токенов, сохранив при этом более высокую точность вычислений в основных слоях, отвечающих за логические рассуждения. Это позволяет сэкономить место в памяти, не снижая при этом интеллектуальные способности модели.

Благодарствую, поправил

Да кто ж знает что такое протоматерия? Мы - материя, как мы познаем протоматерию? Могу даже предположить что в каждой вселенной при взрыве образуются частицы и атомы отличающиеся от наших. Ну и формы жизни отличаются.

Меня никто не спрашивал, но я представляю материю и антиматерию - как две стороны одной "протоматерии". Протоматерия - это "ничего", "пустота". Какая-то внешняя сила выбивает из прото-материи ее часть - материю, а на этом же месте остается антиматерия. При обратном процессе - слиянии материи и антиматерии - происходит аннигиляция (исчезание материи и антиматерии, восстановление протоматерии).

Протоматерия не имеет размеров. Большой взрыв - один из примеров разделения протоматерии на материю и антиматерию.

Мы как наблюдатели, видим только материю, т.к. сами из нее состоим. Вселенная - это материя. Для нас она бесконечно "растет" "из ничего".

Но большой взрыв - это только один из стартовых процессов. Затем материя (для нас - вселенная), дойдет до сильного разряжения, и начнется обратный процесс - сжатие. В конечном итоге - вся вселенная сожмется в одну точку, и начнется новый этап - новый Большой взрыв.

Я бы представил это как кавитация в слое воды: в определенной точке происходит взрыв, надувается газовый шарик, затем он начинает схлопываться, но потом процесс повторяется заново. В этом смысле вода - протоматерия, газовый шарик - материя.

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

Получается, целый год моя статья была на высоте? А нет, запускали 14 августа. Ну штош, ждем следующих конкурсов космотекстов!

Win11 25H2 со встроенной моделью распознавания, процессор AMD Ryzen AI 9 HX 370 с NPU модулем.

Код на C#
using Microsoft.Graphics.Imaging;
using Microsoft.Windows.AI;
using Microsoft.Windows.AI.Imaging;
using Microsoft.Windows.AI.Text;
using System.Text;
using Windows.AI.MachineLearning;
using Windows.Graphics.Imaging;
using Windows.Storage;
using static System.Collections.Specialized.BitVector32;

        try
        {
            string imagePath = @"C:\Users\user\Desktop\Projects\Win11AI-old\test.png";
            imagePath = Path.GetFullPath(imagePath);

            Console.WriteLine("1) Проверка готовности...");
            var readyState = TextRecognizer.GetReadyState();
            Console.WriteLine($"ReadyState = {readyState}");

            if (readyState != AIFeatureReadyState.Ready)
            {
                Console.WriteLine("2) Запуск EnsureReadyAsync...");
                var result = await TextRecognizer.EnsureReadyAsync();

                Console.WriteLine($"Status = {result.Status}");
                Console.WriteLine($"ReadyState after EnsureReady = {TextRecognizer.GetReadyState()}");

                if (result.Status != AIFeatureReadyResultState.Success)
                {
                    Console.WriteLine("Модель не подготовилась.");
                    return;
                }
            }

            Console.WriteLine("3) Открытие файла...");
            StorageFile file = await StorageFile.GetFileFromPathAsync(imagePath);

            using var stream = await file.OpenAsync(FileAccessMode.Read);
            BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);
            SoftwareBitmap softwareBitmap = await decoder.GetSoftwareBitmapAsync();

            using ImageBuffer imageBuffer = ImageBuffer.CreateForSoftwareBitmap(softwareBitmap);
            using var recognizer = await TextRecognizer.CreateAsync();

            Console.WriteLine("4) OCR...");
            RecognizedText resultText = await recognizer.RecognizeTextFromImageAsync(imageBuffer);

            var fullText = new StringBuilder();
            foreach (var line in resultText.Lines)
                fullText.AppendLine(line.Text);

            Console.WriteLine("----- RESULT -----");
            Console.WriteLine(fullText.ToString());
        }
        catch (Exception ex)
        {
            Console.WriteLine("----- EXCEPTION -----");
            Console.WriteLine(ex.GetType().FullName);
            Console.WriteLine(ex.Message);
            Console.WriteLine(ex.ToString());
        }
Исходная картинка в слабом качестве
Готовый результат

Жаль наткнулся только сейчас, и уже нельзя поставить плюс. Спасибо за статью!

За GBNF спасибо. Пригодится для самодельного агента на llm.

Еще можно попробовать в Amuse (3.5.8)

Скрин

Да, мне практически в каждой статье пишут: "зачем это? ведь есть X".

"Обучение LLM с нуля" - это непрактично, заучивает только "немногочисленные диалоги".
ImageBrowserAI - зачем, ведь есть Immich.
VoiceReader - прививает "неправильные паттерны ребёнку".
"Алиса, подвинься" - "Столько трудов и не получилось ничего".

Я не делаю готовый продукт, мне никто за это не платит. Каждая статья - попытка самому разобраться как это работает.

На Ryzen AI 9 HX 370 служба Windows Search активно использует NPU. Пришлось отключить.

0.7B — это мало. Для нормальных связных диалогов нужно минимум 3-7B, и это при условии хорошего файн-тюнинга поверх.

А 0,000103744B хватит что бы модель зазубрила пару диалоговых строк https://habr.com/ru/articles/1017484/ :)

Плюсанул везде где можно. Получилось очень хорошо!

Исходный код: https://github.com/virex-84/LLMGPT2

Добавил выбор всех доступных "ускорителей" на выбор при запуске программы: CPU, OpenCL, CUDA.

Скрытый текст

Анализ корпуса - показывает какую модель можно сделать на основе данного корпуса.

Скрытый текст

Так же добавил авто-конфигуратор модели: конфигурация модели создается исходя из текущего корпуса.

Ну и собственно все классы были оптимизированы для ускорения обучения.

Это реализация gpt-2 архитектуры использующая для обучения OpenCL (CUDA, CPU), с возможностью экспорта в gguf. Для наглядности была выбрана минимально возможная конфигурация, что бы любой мог повторить обучение с нуля на своем железе. Вне этих диалогов будет мусор.

Но никто не мешает вам увеличить конфигурацию и корпус, и получить более осмысленную модель.

З.Ы. на github кто-то уже попробовал обучить микро модель на Nvidia RTX 3090, через CUDA.

Information

Rating
165-th
Registered
Activity