Охранник: У нас дверь сломалась, по пропуску сейчас открывается только снаружи внутрь. А мне надо на улицу, делать обход. Давай сейчас я тебе дверь по кнопке открою, а ты мне её подержишь, чтобы я смог выйти.
Где-то пишут, что будет работать только на гефорсах 3ххх или 4ххх, это всё чушь. Главное, чтобы помещалось в видеопамять.
Запускать решил через ллама.цпп, потому что больше ничего не знал. Работал по советам himself.
Довольно быстро выяснилось: 1. ллама.цпп не работает под вин7 2. Она требует CUDA 11.7 или 12.х, которые тоже не работают под вин7.
Запуск под вин7 -- принципиальный момент. Ставить десятку я не хочу и не буду. Скорее я на линукс перейду (хотя на ноутбуке у меня десятка, но я надеюсь исправить это недоразумение).
Итак, дальше максимально коротко (но получилось всё равно длинно):
1. Хотя везде написано, что куда 11.x не работает под семёрку, это неправда (почти неправда). Качаем и ставим (я поставил 11.8). Но 10.2 тоже качаем и ставим параллельно, потом об'ясню, зачем.
2. ллама.цпп довольно легко собирается под семёрку через w64devkit и make, только собирается она с работой через цпу (~2 токена в секунду). Это неинтересно. Проблемы при работе с w64devkit: а) Надо поправить в мейкфайле версию винды с 0x602 на 0x601. б) Запускать придётся с параметром -no-mmap, а то будут проблемы с длл-ками; я думаю это решаемо созданием заглушки для функции PrefetchVirtualMemory(), которая есть только в восьмёрке. Она не должна серьёзно влиять на производительность (алё, мы запускаем нейронку на цпу, тут уже без разницы).
3. Собрать через в64девкит версию с кудой невозможно, ПОТОМУ ЧТО, как выяснилось, куда сама не умеет компилировать, а требует дополнительный компилятор. И если куда под линукс может работать через гцц, то под винду поддерживается только cl.exe из вижуал студии. А в64девкит про это не знает и вызывает цл.ехе с параметрами, как для гцц. Естественно, ничего не собирается.
4. Следующая итерация: MSVS 2019. Младше не подходит, потому что через мсвс идёт сборка через CMake, и там надо, чтобы версия этого цмейка была 3.13, а в 2017 студии версия меньше. Ставим BuildTools, потому что они меньше по размеру. Вызываем ком. строку из главного меню, из раздела вижуал студии, чтобы все PATH были правильно подписаны. Пишем команды по вот этой инструкции: blog.gopenai.com/how-to-build-llama-cpp-on-wind..., а именно:
5. Ничего не собирается с загадочными сообщениями: "CUDA found", "No CUDA toolset found!", потому что ОКАЗЫВАЕТСЯ, сначала надо было ставить мсвс, а потому куду. Но повторная попытка установки куды показывает, что она всё равно не видит мсвс. Связать мсвс и куду можно вручную, если последовать первому совету в этом вопросе: stackoverflow.com/questions/56636714/cuda-compi..., а именно вручную распаковать установщик и перенести четыре файла из папки .\visual_studio_integration\CUDAVisualStudioIntegration\extras\visual_studio_integration\MSBuildExtensions в папку C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\BuildCustomizations . (взрыв мозга)
6. После сборки, чертыхаясь, открываем CMakeLists.txt и уже там меняем номер версии винды с 0x602 на 0x601. Собираем ещё раз.
7. У нас всё собралось, но по-прежнему ничего не работает, поскольку ОКАЗЫВАЕТСЯ, что ллама-цпп грузит cudart64_110.dll (расположенный в C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\bin), который сам собран для вин8. Поэтому хотя он и не использует специфических вин8 функций, но всё равно не запускается. Можно пробовать подкладывать ему библиотеки из вин8, но я решил поступить более радикально. Я взял аналогичный файл (cudart64_102.dll) из куды 10.2 (вы помните, мы его ставили?) и заменил с переименованием. Удивительно, но это помогло!
8. Это всё хорошо. Теперь у вас будет работать llama-cli.exe, но хочется комфорта. Хочется llama-server.exe, который будет показывать веб-морду с чатом в браузере. Разработчики ллама-сервер использовали функции, доступные только в вин8, например CreateFile2. Это не функции с настоящим новым функционалом, это старые добрые функции, которым выдали варианты с укороченным списком параметров. Придётся вручную заменить новые функции на старые. Конкретные строки можно посмотреть тут: github.com/ggerganov/llama.cpp/pull/8208/commit... . Это уже сделали до меня. Для полноты я привожу тут эти строки целиком:
После этого надо опять запустить сборку. Уже последнюю.
===
Теперь сам запуск. Модель качается с hugging face. Официальные модели можно скачать только после регистрации, однако различные переработки доступны к скачиванию без регистрации. Я использовал вот этот вариант:
-port: это порт, на котором будет висеть сервер. Если всё запустится, то веб-морда будет по адресу 127.0.0.1:8081 -c: это размер контекста. Сумма размеров сети и контекста должна быть меньше об'ёма видеопамяти. Проблема в том, что размер контекста задаётся в токенах, а токены нельзя простым образом перевести в мегабайты. Для Q6 версии один токен занимает 125 KiB. Я на своей карте смог завести с контекстом в 10000, а в 12000 уже не смог, хотя по сумме должно влезать. Пока с этим не разобрался (Алсо, при большом контексте почему-то начало зверски тормозить). По умолчанию размер контекста равен 131072, что требует 16 гигабайт видеопамяти только на него. Многовато. -ngl: число слоёв, выгруженных на видеокарту. Ничего страшного, если тут будет больше, чем есть на самом деле. У этой сети 33 слоя.
Ну и вот, теперь можно работать:
Увы, аналогичные по размеру нейронки не знают анатомию ежей.
Небольшой рол-плей.
Тут я проверяю задачу про сестёр Алисы. Результаты неутешительные, но смешные.
Примерно 20 токенов в секунду. Это в 10 раз лучше, чем на процессоре. (whisper AI показывал такую же разницу)
В следующей серии мы будем запускать под виндоуз 7 новейшие StableDiffusion и FLUX. Стоя и в гамаке -- вот наш девиз!
Если вам нужно то, что есть на рынке -- вам повезло. Если нужно что-то специфическое, может оказаться, что его нет в природе. И даже индивидуальный подход может не помочь.
У ключа от замка стержень довольно длинный. Такая длина не продиктована технической необходимостью, т.к. значительная часть стержня выступает из замка, если ключ вставить. Нужен такой же ключ, но со стержнем на 2 сантиметра короче.
Походил по металлоремонтам, поспрашивал. ОКАЗЫВАЕТСЯ,
что все заготовки -- фирменные, одинакового размера. Кроме того, металлоремонты делают ключи из заготовок, но оборудования для укорочения у них нету.
То есть, если я хочу более короткий ключ, то мне предстоит распилить и сварить ключ самостоятельно. Или придумать другой, более надёжный способ скрепления.
Если трата разовая то, в принципе, всё равно, сколько денег за неё просят -- в сторону увеличения, конечно. Иногда даже кратные ценники типа x4 могут не иметь большого значения. В игру тут будет вступать уже жаба.
Я не говорю о крупных покупках, которые по своей сути делаются крайне редко или вообще один раз в жизни. Я говорю о тех вещах, которые одни люди покупают редко, а другие -- часто.
И вот если тот же предмет или услуга становится регулярной, то её стоимость в глазах покупателя становится важнее, чем была раньше -- уже не только из-за жабы, но из-за практических ограничений. Регулярная покупка должна вписываться в бюджет.
Разовая тоже должна вписываться, но из-за того, что она разовая, её влияние на бюджет значительно меньше, чем у той же покупки, но регулярной.
Возьмём какой-нибудь товар. Для цены x1 при ежедневной покупке расходы на месяц получаются x30. А для наценки x4 расходы получаются уже x120. В абсолютных значениях разница таких сумм может оказаться просто удивительной. И наоборот, если удастся найти, где покупать по x0.9 цены, получится заметно сэкономить.
Если же покупка разовая, то и x1, и x4 мало повлияют на бюджет по сравнению с x30.
Практическое применение этого правила можно наблюдать со стороны продавцов. Если вы турист (привет нетхакерам!), то вам можно предложить высокую цену за товар или услугу. Не только из-за того, что вы лох, но из-за того, что цена не является определяющим фактором. Те же, кто совершают покупки туристических товаров регулярно (например, ПЕРЕКУПЩИКИ), исследуют совсем другую зону рынка, потому что для них цена важна.
Сидел я в аэропорту, ждал самолёт. За мной сидел паренёк лет 18-20, похоже с мамой. И рассказывал ей.
"Я уже Москву лучше, чем Ульяновск знаю. Я могу перемещаться по ней... на любом виде транспорта. Кроме этого..." "Метро?" "Да, метро." "Ну, вот надо тебе в метро побывать"
Я немного... прихерел. Я вот Москву нифига не знаю. Мне бы такую самоуверенность!
Во-первых, появилась новость о комиссии в яндекс-маркете. Во-вторых, яндекс-такси мне теперь при каждом заказе пишет, что отмена будет платной. В-третьих, время бесплатного ожидания в некоторых зонах сокращено до... двух минут.
Ну и самое шикарное... прилетел из командировки и вижу вот это:
Конечно, я заказал бесплатную дорогу. Потом сел на ближайшую тумбу и задумался.
***
Спустя минуту я понял, что не хватает одной детали. Я облокотился правым локтём об левое колено и подпер ладонью голову...
Аккумуляторы со временем деградируют. Есть одна особенность, которая касается запасных аккумуляторов для звонилок, смартфонов и другой техники: они все плохие. Штатный аккумулятор обычно служит пару лет. Если брать новые после этого, то оказывается, что они либо не новые, либо некачественные. И вот уже через полгода мы приходим к ситуации, когда первый аккумулятор держит лучше, чем новый.
Но в этот раз я столкнулся с другой неполадкой.
По некоторым причинам один из моих активных смартфонов -- xiaomi redmi 4. Сколько запасных аккумуляторов он пережил, я писать не буду. Я не помню. Суть в том, что после очередной замены я забыл закрутить два нижних винта у смартфона. А у него крышка на этих двух винтах и держится.
Ну ничего. Смартфон не разваливается благодаря силе трения и пластиковым зацепам.
И вот неделю назад я собрался смартфон зарядить и обнаружил, что кабель не лезет в раз'ём. Посветив туда фонариком, я обнаружил, что крышка смартфона начала отваливаться, что вызвало смещение раз'ёма относительно внешнего отверствия. В чём же было дело?
Конечно же, в том, что аккумулятор стало пучить. Но не так, как это бывает, когда в нём накапливаются газы. Он стал каким-то неровным и бугристым. По времени работы претензий не было, но внешний габарит -- это не менее важный показатель.
В чём дело-то? Если бы я не забыл полгода назад закрутить винты, смартфон могло бы порвать, как тузик грелку. А если бы не порвало, то я мог бы и не узнать о вспучивании, потому что у редми4 металлическая крышка, и вспучивание было бы незаметно. Дальнейшие последствия могли бы быть разнообразными и невдохновляющими.
Из-за того, что произошло это неожиданно, я не успел купить новую АКБ, и уехал в командировку с тем, с чем было. И уже тут я заказал АКБ с озона. Её привезли за полтора дня, и я оперативно её поставил. Посмотрим, что будет.
Мне дали энидеск компьютера и сказали, что надо попробовать удалить оттуда доктор веб.
Я многократно пользовался доктор веб кьюр ит, и не ожидал проблем. Но они ожидали меня.
В доктор вебе, как выяснилось, есть функция самозащиты, которая не позволяет удалить его штатными средствами. Эта защита отключается, если ввести каптчу. И если у вас есть разрешение на её снятие.
Разрешение устанавливается в онлайн-аккаунте. Таким образом, если доступ к аккаунту утерян, то удалить доктор веб можно только хирургическими методами с параллельной установки. Хотя может и на этот случай там что-нибудь придумано.
Есть специальная утилита от самого доктора веба, доктор веб ремувер. Но перед запуском она пытается снять защиту от удаления. А поскольку снять её она не может, то и удалить ничего не может тоже.
Доктор веб пропадает из всех меню и из списка установленных программ, но остаётся висеть в трее.
Коллега сделал чертёж, но не указал материал. Отдал в производство.
Предполагалось, что деталь будет сделана из алюминия. Но фрезеровщик об этом не знал. Он потом сказал -- у меня была трёхмиллиметровая сталь -- я из неё и сделал.
В общем, деталь работать будет. Просто... она очень тяжёлая.
Опять уехал в командировку, на этот раз на поезде.
***
На туалете надпись о том, что туалетом можно пользоваться во время стоянки. Я, зная историю вопроса, понимаю, что имеется ввиду, что можно пользоваться В ТОМ ЧИСЛЕ во время стоянки. Но если историю не знать, то получается, что на туалете написано, что пользоваться им можно ТОЛЬКО во время стоянки. Контринтуитивно.
***
Поезд был двухэтажный. Попутчики рассказали историю.
Маленький мальчик впервые увидел двухэтажный поезд. И спросил у родителей -- есть ли там лифт на второй этаж? И все засмеялись. (лифта такого нет)
На светофоре мне побибикал таксист. Справа. У меня нет электрического стеклопод'ёмника, как я узнаю, что он там мне говорит?
Искорячившись, я приоткрыл переднюю пассажирскую дверь и услышал следующее:
"У вас дверь открыта"
(я знаю)
"Задняя левая"
(что?!)
Смотрю -- дверь действительно приоткрыта и болтается. Я знаю, почему: потому что я лазил на заднее сиденье перед выездом и дверь не захлопнул. И... проехал так больше 20 километров! Повезло, повезло.
Я закрыл дверь и показал таксисту большой палец.
Ближе к концу пути я встал на светофоре с другим таксистом, у которого мигала аварийка. Внешних признаков неисправностей не было видно.
Привычным движением, искорячившись, я приоткрыл переднюю пассажирскую дверь.
2-3 дня дайари сильно тормозил. При этом перестали работать мои скрипты по скачиванию и репосту в телеграм. Потому что была включена защита cloudflare. Я решил, что сайт дудосят.
Сейчас сайт работает хорошо, но защиту не отключили. Тем не менее, это не мешает спаммерам рассылать свои спамы. А вот мне заниматься своим чёрным делом -- мешает.
Проблема в том, что и мне, и злоумышленникам надо одно и то же -- заходить на дайари ботом и что-то там делать.
Я знал, что из браузера окно защиты не показывается, а из скриптов показывается. У меня возникло подозрение, что защита запоминает конкретного клиента, и не выдаёт ему галочек и светофоров. Я полез в кукисы. Там я нашёл подозрительный кук с названием cf_clearance.
Погуглив по нему, я обнаружил ценную информацию о том, как проходить защиту клаудфлейр. Помещаю её здесь.
Итак, сначала защита должна быть пройдена человеком в браузере. После этого клаудфлейр будет пускать любые скрипты, если соблюдены следующие условия:
1. У вас валидный пропуск (кук cf_clearance, который надо взять из браузера; срок годности -- 1 год!) 2. У вас тот же юзер-агент, что и в браузере, где вы получили пропуск 3. У вас тот же айпи-адрес
Я выполнил эти три пункта и стал получать нормальные страницы. И даже смог удалять спам-комментарии из своего псевдо-интерфейса.
Перед отпуском купил на работу новые тапочки. А ходить на работе в тапочках -- это просто отлично, всем советую как сменную обувь.
Вернулся из отпуска -- тапочек нет. Я стал ходить, расспрашивать, где мои тапочки. Никто не знал. Потом я заглянул глубоко под шкаф -- и нашёл их там.
Один из сотрудников обиделся, что я его подозревал по поводу тапочек. И, видя его обиду, я понял, что у анекдота про украденные ложки есть вторая сторона.
Я его всегда слышал в варианте, что осадок остался у хозяев, хотя ложки нашлись. Но, оказывается, осадок остаётся у гостей тоже.
Какая-то мистика у меня в последнее время происходит с ключами. Или я просто долбоёб.
Когда я обнаружил, что дверь у машины умеет сама захлопываться и запираться, я стал носить с собой запасные ключи. Через какое-то время они пропали. У меня была идея, где я мог их потерять, но там я ничего не нашёл.
Перед поездкой на дачу не смог найти ключи от этой самой дачи. Хорошо, что у родителей был свой комплект.
На даче прибирался в машине -- нашёл запасные ключи от неё под ковриком. Окей.
Еду после отпуска с дачи -- забыл проверить ключи от квартиры. Что их нет, я обнаружил только в Москве. Опять взял дубликат ключей от квартиры у родителей. Захожу в квартиру -- вижу ключи от дачи. Окей.
Беру ключи от дачи и еду искать ключи от квартиры. Оказывается, они выпали из кармана штанов и завалились между кроватью и комодом. Окей.
Как можно догадаться, название вчерашнего поста было отсылкой к этой книге.
Пустота -- это Пётр Пустота, он же Петька. Повествование проходит по очереди в двух местах -- в начале XX века, где Петька участвует в Гражданской войне, и в конце XX века, где он лежит в психиатрической больнице. Когда он засыпает в одном месте -- он просыпается в другом, и наоборот. Мы видели этот приём в художественной литературе неоднократно. Например, ещё раньше это было у Мураками, Страна чудес без тормозов (1985).
В художественном плане у меня вопросов нет (а к Generation П, например, были). Тут вопросы в другом.
Первый вопрос -- это огромные "путешествия" персонажей, набранные курсивом. 10-30 страниц курсива читать элементарно тяжело. Кроме того, они гораздо скучнее основного текста. На одном из этих "трипов" я поставил книжку на паузу и дочитал только спустя год.
Второй вопрос -- общая структура. В основном, я знаком с ранним Пелевиным. Его истории -- это почти всегда истории о трансформации (инициации). Их сюжет легко улавливается, поскольку структура повторяет типичную структуру мифа. А вот с этим романом всё не совсем так. Безусловно, это история о трансформации. Однако её подлинная структура от меня ускользает. Персонажи обоих миров явно дублируют друг друга. Но кто есть кто? Персонажи явно являются частями души одного человека, либо каждый представляет собой какое-то понятие из буддизма. Но какое?
Моих познаний не хватает, чтобы всё это понять. А может быть, никакой структуры тут и нет, и читать надо просто как юмористические приключения с референсами к буддизму и оккультизму.