1
|
Хумор, сатира и забава / Живота, вселената и някакви други глупости / Re: Още извънтемие
|
-: Jul 22, 2024, 19:59
|
Тензор библиотеките са написани на С, та се съмнявам те да са причната. Както и всички останали библиотеки за Питоня, които изискват повечко бързина. Самия модул за Питона е само обвивка, която да извиква методите.
Всъщност, да, имаш право за питона и обвивката. Сега се сетих причината, @ggerganov искаше да направи бърза CPU inference имплементация на модела, щото оригиналният whisper е бърз само за GPU. Гледам, че в момента бутат също и поддръжка за GPU. Е, поваля малко и покрай нас. Ама пак е горещо и задушно, маа му стара.
Няма измъкване от тая жега...
|
|
|
2
|
Хумор, сатира и забава / Живота, вселената и някакви други глупости / Re: Още извънтемие
|
-: Jul 22, 2024, 00:01
|
Така, за по-просто и за опит, инсталирах първо whisper. Дръпна една камара библиотеки в процеса.
При първата проба с десет минутно аудио, само̀ си дръпна модела, който му бях посочил, което е дребно и хубаво удобство - medium. Гигабайт и половина.
Но не се получи почти нищо. Имаше някакъв обещаващ старт, но… По някое време целия дисплей замръзва, а аз нищо не мога да направя. Графичната карта е на сто процента натоварена и може би целия ресурс отива за изпълнението на задачката ( което ми хрумна като възможна причина едва сега, докато пиша това ). Пробвах след това през tty. Същата работа. Конзолата замръзва и до там. Дали работи нещо отдолу, нямам представа. Никакви странични съобщения.
Графичната ми карта е едва с 6 гига памет, а този модел изисква 5. Би трябвало да стане. На теория.
Опитът със small модел свърши работа в tty. Не съм го пробвал с терминал в графичната среда.
Смахнатото е, че имам 32 гига RAM на лаптопа, която изглежда не учавстваше много. Видях, че май може да се зададе устройство, което да се използва ( например CPU ), но още не съм пробвал. Сигурно ще стане и по-бавно така. Но тази памет поне би влязла в употреба.
Small моделът свърши учудващо добра работа, предвид че в речта на моменти бяха изяждани или сдъвкани звуци - английски акцент. Ползвах аудио, рипнато от видео в Тубата.
Пробвах първо оригиналния whisper, защото изобщо не съм се занимавал до този момент с ИИ. Видях, че има различни файлови разширения за моделите.
С++ версията на @ggerganov изцяло на този език ли е, ще върви ли по-леко, в същата папка ли трябва да поставя дръпнатите модели ( ~/.cache/whisper ), ако реша да пробвам и това. Защото сигурно ще го направя. Човека е дал достатъчно инструкции, как се инсталира. Защото искам да пробвам и medium, а защо не и големия модел, ако ми позволи да използвам наличната памет, а не само видео паметта. Тя е недостатъчна за големия модел, а и със средния не се получава засега. Да видя, каква е разликата в точността на текста.
Изглежда си си играл с whisperC++?, а не изключвам и да си самият @ggerganov, но поради някаква причина да говориш за себе с в трето лице
Хаха, де да бях @ggerganov. Реално човекът е решил да пренапише tensor операциите и transformer API-то на c++ за по-голяма скорост и оптизизация на работа, понеже python не е от най-бързите. Аз досега съм пускал whisper само със CPU, понеже видео картата ми е дърта и не поддържа nvidia cuda, или нещо подобно. Не знам при теб дали бачка GPU-то. Щом ти замръзва машината, предполагам, че превключва на CPU и затова замръзва дори в tty. Ако е така, просто ползвай small. Относно файловите разширения, @ggerganov е решил да използва ggml binary формата понеже всичко е пакетирано в 1 файл: https://github.com/ggerganov/whisper.cpp?tab=readme-ov-file#ggml-formatПробвай whisper.cpp и виж дали ще работи по-ефективно откъм CPU. Доста по-лесно се пуска, единствено трябва да си дръпнеш модела на ръка и да го сложиш в папката whisper.cpp/models После пробвай с моя помощен скрипт да транскрибираш нещо: https://gist.github.com/PaperNick/3a6fe78662ea7a1c7cc5c573db348ac1Ако ти работи бавно, можеш да пробваш с faster-whisper: https://github.com/SYSTRAN/faster-whisperИ за него имам скрипт (брей много реклама си направих ) https://gist.github.com/PaperNick/61cf16f0f1c5735d988c0703c25f3cf2
|
|
|
3
|
Хумор, сатира и забава / Живота, вселената и някакви други глупости / Re: Още извънтемие
|
-: Jul 19, 2024, 14:16
|
Мога да отделя някъде към пет гигабайта дисково пространство. Може да се окаже недостатъчно, защото искам три езика да ползвам, та... май ще е проблем.
Мисля, че ще е напълно достатъчно, понеже линуксите си идват със стандартните runtimes за c++. Реално единствено модела ще заеме най-много място. В такъв случай пробвай с medium модела 1.5 GB. Английското ми произношение сигурно е ужасно. Не съм говорил от доста години.
Всякакъв акцент лови, толкова е добро, че направо ще те шашне (поне за английски де) Може и real-time, но не съм го пробвал: https://github.com/ggerganov/whisper.cpp?tab=readme-ov-file#real-time-audio-input-example
|
|
|
5
|
Хумор, сатира и забава / Кошче / Злословие или не
|
-: Dec 11, 2020, 14:16
|
@samo_za_info, мерси за инфото. Подозирах нещо такова, но се замислих, кой ли клиент би чакал за нещо подобно 1+ година? (темата е създадена Jul 03, 2019, 19:52) Отделно, услугата на ЧЕЗ е публична и всеки може да я ползва. Явно за всеки влак си има пътници...
|
|
|
6
|
Програмиране / Web development / Re: Авариите на чез.
|
-: Dec 08, 2020, 22:04
|
Извинявай но не знам къде да ги добавя в кода.
Няма да стане толкова просто, а и не знам какво точно искаш да постигнеш. CLI програмка ли искаш да си направиш или web страница? Не мога да отделя повече време по проблема. Надявах се, че разбираш поне малко от програмиране и ще можеш да се оправиш сам след насоките.
|
|
|
7
|
Програмиране / Web development / Re: Авариите на чез.
|
-: Dec 08, 2020, 16:46
|
А реално как ще стане със всички ID които има чез. Благодаря предварително
Ми така като гледам, предложенията за градове ги взима от самата HTML без да прави други заявки: Ако прегледаш изходния код на страницата https://info.cez.bg/js/avarii/av1.php ще видиш всички имена и id-та на ред 249: autocompleteData = $.parseJSON('[{"value":"153","label":"СОФИЯ"}.....
|
|
|
8
|
Програмиране / Web development / Re: Авариите на чез.
|
-: Dec 08, 2020, 15:01
|
Как мога да го визуализирам в php, пробвах с това shell-exec не става
Ето едно примерче за София - Перник е с ид 149
GeSHi (Bash): curl -d "city_id=153&page=1" -X POST https://info.cez.bg/js/avarii/contents.php | grep -oP '<span style="float:left;font-size:small">.*?<\/span>' | sed 's/<[^b][^<>]*>//g'
Не е нужно да използваш shell_exec, просто направи заявката от PHP. Ето какво сътворих набързо използвайки регулярния израз на колегата: GeSHi (PHP): <?php $SOFIA = 153; $PERNIK = 129; $NO_BREAKDOWNS_MESSAGE = 'няма прекъсвания на захранването'; $requestOptions = [ 'http' => [ 'method'=> 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => http_build_query(['city_id' => $SOFIA, 'page' => 1]) ], ]; $fp = fopen('https://info.cez.bg/js/avarii/contents.php', 'r', false, $context); $pageContent = stream_get_contents($fp); if (strpos($pageContent, $NO_BREAKDOWNS_MESSAGE) !== false) { echo 'Няма авария' . PHP_EOL; } else { echo 'Има Авария' . PHP_EOL; } $regionBreakdownPattern = '/<span style="float:left;font-size:small">(.*?)<\/span>/i'; foreach ($breakdowns[1] as $breakdown) { echo $breakdown . PHP_EOL; }
Голяма част от кода я взех директно от документацията: В София има авария в момента и ми изкарва това: Има Авария жк.ХИПОДРУМА<br>СМИЛИЦА жк.ХИПОДРУМА<br>ХИПОДРУМА жк.ХИПОДРУМА<br>ПИРИНСКИ ИЗВОР жк.ХИПОДРУМА<br>КЮСТЕНДИЛ/АТАНАС НЕНОВ/ жк.БАНИШОРА<br>БАНИШОРА жк.БАНИШОРА<br>ГЕН. СТОЛЕТОВ жк.БАНИШОРА<br>ИВАН ТУРГЕНЕВ
Edit: разписах го на PHP 7.2
|
|
|
9
|
Програмиране / Web development / Re: Авариите на чез.
|
-: Nov 19, 2020, 19:11
|
Днес се присетих за тази тема и по-точно за Selenum. И се сетих, че преди година време чух за поредната му алтернатива. Казва се Cypress – https://www.cypress.io/.
Тогава пича, който я препоръча, каза:
Има изключително много възможности за тестване, само че не става за тестване на SalesForce. За всичко друго е супер и много по добре от Selenium според мене. Бях чувал за Cypress, но не бях цъкал с него досега. Разписах проверките за аварии на ЧЕЗ и се получи доста добре. Ето и кода: GeSHi (Javascript): const CEZ_BREAKDOWNS_URL = 'https://info.cez.bg/js/avarii/av1.php'; const NO_BREAKDOWNS_ASSERT_MESSAGE = 'няма прекъсвания на захранването'; const populatedPlaces = [ { name:'Перник', fullMatch: false }, { name:'Кюстендил', fullMatch: false }, { name: 'Буново, общ. Кюстендил', fullMatch: true }, ]; describe('CEZ Breakdowns', () => { beforeEach(() => { // https://docs.cypress.io/api/events/catalog-of-events.html#Examples cy.on('uncaught:exception', (err, runnable) => { // An "Uncaught ReferenceError: object is not defined" exception is thrown from CEZ webpage. // Ignore it so that the execution can continue. // Return false to prevent the error from failing the current test. return false; }); }); function checkBreakdown(place, fullMatch) { it(`should not have any breakdowns for "${place}"`, () => { cy.visit(CEZ_BREAKDOWNS_URL); cy.get('#searchField').type(place); const searchValue = fullMatch ? place.toUpperCase() : new RegExp(`^${place.toUpperCase()}`); const placeSuggestion = cy.get('#suggestions .ui-btn').contains(searchValue, { matchCase: true }); placeSuggestion.should('have.length.greaterThan', 0); placeSuggestion.click(); cy.get('[data-role="content"] .ui-body').should('contain', NO_BREAKDOWNS_ASSERT_MESSAGE); }); } populatedPlaces.forEach(place => checkBreakdown(place.name, place.fullMatch)); });
Ето и как се пуска: GeSHi (Bash): mkdir cez_checker cd cez_checker/ npm init --yes npm install cypress --save-dev echo '{}' > cypress.json mkdir -p cypress/integration touch cypress/integration/cez_breakdown_spec.js # Поставете съдържанието на скрипта в "cypress/integration/cez_breakdown_spec.js" npx cypress run --quiet
В браузъра се пуска с: GeSHi (Bash): npx cypress open
След изпълнението има дори видео запис GeSHi (Bash): $ ls cypress/videos/ cez_breakdown_spec.js.mp4
А, да, трябва да инсталирате NodeJS.
|
|
|
10
|
Linux секция за начинаещи / Настройка на програми / Re: Някой с някакъв опит с LineageOS?
|
-: Aug 22, 2019, 11:24
|
Не вярвам да стане лесно без познания по embedded системи и особености на портването lineage os. Аз за това си харесах едно Xiaomi Mi A1 за целта. Нече не ми се занимава или нямам идея как ще протече процеса, но нямам времето и нервите да го правя. Предполагам че мога да мина и с по-малко пари, за някой телефон 2-ра ръка, но пък там си е лотария какво ще уцелиш.
Да, усетих че съм още зелен за тая работа опитвайки се да разбера как ще стане. И аз ще взема някое телефонче да цъкам, пък след някоя друга година току-виж съм изкарал работещ build.
|
|
|
11
|
Linux секция за начинаещи / Настройка на програми / Re: Някой с някакъв опит с LineageOS?
|
-: Aug 22, 2019, 09:29
|
А някой успявал ли е да подкара LineageOS на device, който не се поддържа (не е изброен в техния сайт)? От няколко месеца се каня да пробвам Lineage и се чудя дали няма да е по-лесно просто да си купя телефон, който се поддържа и да си експериментирам, вместо да се мъча да build-на нещо на ръка (едва ли ще успея)?
Полезна информация stealth, благодаря!
|
|
|
12
|
Програмиране / Web development / Re: PHP каква е тази конструкция $w['parent']()[0]
|
-: Jul 01, 2019, 20:15
|
Сигурно вече си се ориентирал и си го тествал, но все пак: GeSHi (PHP): <?php $foo = 'test'; $test = ['bar' => ['baz' => 'result']]; // Interpreted as ($$foo)['bar'['baz'] in PHP 7. Prints "result". // This line throws a Warning and Notice in PHP 5 echo $$foo['bar']['baz']; // Compatible in PHP 5 and 7. Prints "result". echo $ {$foo}['bar']['baz'];
|
|
|
14
|
Програмиране / Web development / Re: PHP каква е тази конструкция $w['parent']()[0]
|
-: Jun 27, 2019, 16:09
|
Това означава ли че работещ код под PHP 5, например $$foo['bar']['baz'] точно така написан (без допълнителни скоби) може да върне съвсем друг резултат под PHP 7? Ами за останалите три примера ще връща ли различен резултат под PHP 7.
Да, много е вероятно понеже когато ставаше миграята към 7, доста хора се оплакваха, че това им е счупило проектите. И в Wordpress имаше някаква драма, ама вече не помня. Това ми бърка в мозъка а и нямам php7 да го пробвам.
И аз нямам. Горните примери ги нацъках в един online tool. Използвах този, понеже поддържа доста версии: http://sandbox.onlinephpfunctions.com/Ако ми остане време и успея да измисля някакъв пример за $$foo['bar']['baz'], ще тествам и ще пиша.
|
|
|
15
|
Програмиране / Web development / Re: PHP каква е тази конструкция $w['parent']()[0]
|
-: Jun 22, 2019, 21:24
|
Variable variable е с два долара: $$w
----
$w['parent']()[0] да не искаш да кажеш че това е името на функцията??? т.е. в $w['parent'] например се съдържа 'my_func'
а $w['parent']() тогава извиква my_func()
а пък $w['parent']()[0] връща нулевият елемент от резултата на масива на функцията??? my_func()[0] <---- това вече го разбрах че е новост в php5.4
Шантава работа..Така ли е наистина. Тук нещо понамерих: https://www.php.net/manual/en/functions.variable-functions.php
ако наистина е така насочването беше успешно и си заслужи бирата.
Макар, че go_fire те побутна в правилната посока и се ориентира сам, все пак да потвърдя, че поведението е такова. Общо взето, както си установил, в PHP 5.4 вкараха "array dereferencing" на методи/функции които връщат нещо. https://www.php.net/manual/en/migration54.new-features.phpВ твоя случай това ще рече, че след извикването на динамичната функция, PHP-то ще последва референцията където се намира масива в паметта и ще достъпи първия елемент. Преди PHP 5.4 се налагаше резултата от функцията да се присвои на променлива. GeSHi (PHP): // PHP 5.3 <?php function test_func() { return array('Test was called'); } $my_array = array('parent' => 'test_func'); $func_result = $my_array['parent']();
GeSHi (PHP): // PHP 5.4 <?php function test_func() { return ['Test was called']; } $my_array = ['parent' => 'test_func']; echo $my_array['parent']()[0];
Готиното на този синтакс е, че ти позволява да навързваш такива извиквания без да се налага да присвояваш резултата на всяка стъпка: GeSHi (PHP): $arr['parent']()[0]['child']()[1]
(не трябва да се прекалява обаче, понеже става трудно за четене и дебъгване) И понеже предвиждам, че точно този синтакс ще ти докара ядове когато мигрираш към PHP 7+ ти пускам тази статия, която показва промените свързани с приоритета на изпълнение на подобни динамични извиквания: https://www.atlantic.net/hipaa-compliant-cloud-storage/what-is-php7-breaking-changes-php5/и там секцията "Uniform Variable Syntax". Ако те мързи да кликаш, това: GeSHi (PHP): $atlantic->$dot[‘net’]()
В PHP 5 се изпълнява с този приоритет: GeSHi (PHP): $atlantic->{$dot[‘net’]}()
А в PHP 7+ с този: GeSHi (PHP): ($atlantic->$dot)[‘net’]()
Забавлявай се
|
|
|
|