Jazyk pro ML

Jazyk pro ML
« kdy: 02. 04. 2023, 01:29:05 »
Nedavno jsem tu zalozil vlakno "Kde dal studovat" dal jsem na Vasi a meho okoli radu a rozhodl jsem se venovat ML. Chci se zeptat, jaky jazyk je vhodny. KLasicky, vsude radej (zejmena pro zacatecniky) Python. Me spis laka C++, hlavne pro hlubsi pochopeni a na nekterych pozicich (hodne v automative) to preferuji.


alex6bbc

  • *****
  • 1 446
    • Zobrazit profil
    • E-mail
Re:Jazyk pro ML
« Odpověď #1 kdy: 02. 04. 2023, 10:07:27 »
rekl bych, ze kdyz nekdo umi c++, tak dostat se do pythonu je pak uz sranda.

python je zas jednodussi pro zacatecnika.
mi se python prestal "libit", takze kdyz nedelam v c++, tak se mi libi go.

Re:Jazyk pro ML
« Odpověď #2 kdy: 02. 04. 2023, 14:00:36 »
Jsem asi už starej na to, abych Python ocenil. Z těch nemnoha setkání si pamatuju v jeho historii jakési kotrmelce "doprovodné infrastruktury" (package management), na které se mi trochu těžko zapomíná. Když vidím nějaký zajímavý open-source nástroj, který je distribuován ve formě pythonových zdrojáků, mám chuť zde udeřit hlavou. Je to takový můj subjektivní podmíněný reflex, na základě předchozích zkušeností (bloatware, verzování, dependency hell, bugy v obskurních externích závislostech). Ale on si v dnešní době člověk moc nevybere. Dependency hell a jeho přenechávání uživatelům je spíš otázka vkusu autorů aplikace, než volby programovacího prostředí.
Ze vrozených charakterových vad bych zmínil "vymezení bloku v kódu hloubkou odsazení". Mám radši závorkovaté jazyky, kde si mohu odsazovat relativně podle svého, pokud mi "coding style" projektu dovolí.
Python je jazyk o něco vyšší úrovně než C/C++. Pro nativní systémové knihovny a syscally potřebuje mít kompletní "bindings". A pravda je, že jich má asi požehnaně.

Python se dneska běžně učí ve školách jako "jednoduchý" jazyk pro začátečníky - tam, kde se dřív učil Pascal.
Jsou lidi, kteří se ze zásady odmítají zajímat o to, jak věci fungují "pod kapotou" - těm musí Python vyhovovat lépe než C/C++.

C++ je potomkem starého dobrého C, což je takový "platformově nezávislý assembler". Pokud nechcete, v C++ už se nemusíte starat o detaily pointerů a alokací - moderní revize C++ se všemožně snaží, od těchto starých zvyků se navenek oprostit, programátora těchto starostí ušetřit. Osobně považuji za přínosné, že je přesto C++ k těmto "kořenům" dodnes relativně pevně přirostlé. Máte k dispzici plnou paletu nativních datových typů holého Céčka, operačního systému a v zásadě i hardwaru.

V jazyce C jsou napsané dnešní operační systémy. Takže různé novoty a okrajové vlastnosti kernelu, systémové standardní knihovny a dalších "nativních" knihoven můžete používat přímo, stačí includnout hlavičkový soubor. (Ve vyšších jazycích musíte čekat, až někdo napíše binding/wrapper/importní modul, nebo si ho napsat sám.)
C++ má oproti C spoustu výhod, snaží se odpoutat od nectností starého dobrého C, taky díky tomu lze narazit na "třecí plochy" v rovině kompatibility ABI mezi různými verzemi či značkami kompilátorů C++. Některé pekelné "vlastnosti" C++ (třeba přehlednost chybových hlášek kompilátoru ve složitých šablonách apod.) se postupem času zlepšují - blahodárným se ukázal vliv konkurence (po příchodu CLANGu zavál svěží vítr i ve vodách GCC/G++).

S čím Vám neporadím je "praktická použitelnost ekosystému" C++ vs. Python pro Machine Learning. Jestli třeba C++ představuje nějakou námahu navíc ve chvíli, kdy člověk potřebuje "odněkud rychle začít".

C++ není třeba studovat hned od začátku encyklopedicky. Pokročilejším vlastnostem budete přicházet na chuť postupně, jak budete potkávat složitější problémy. Budete narážet na přízraky minulosti - třeba doutnající válka "printf() vs. cout" není dodnes rozhodnuta. Pokud v C/C++ nějak začnete, nikdy se Vám to neztratí.

Dobře se bavte :-)

Re:Jazyk pro ML
« Odpověď #3 kdy: 02. 04. 2023, 14:14:16 »
Řekl bych, že to dost záleží na tom, co už umíš.
Pokud s programováním obecně teprv začínáš, pak bude Python lepší volba, i když ho pak třeba nakonec v práci používat nebudeš. Ale na naučení principů je o hodně jednodušší než C++, to je pro začátečníka podle mě naprosto nevhodný jazyk.
Pokud už programovat umíš a ptáš se, jaký jazyk se učit kvůli ML, tak to asi úplně neporadím, protože se v ML neorientuju - ale v Pythonu údajně existuje velká hromada knihoven pro ML,v C++ jich asi bude o něco míň.

Re:Jazyk pro ML
« Odpověď #4 kdy: 02. 04. 2023, 14:27:52 »
Strojove uceni ma smysl jen na GPU nebo jinem specializovanem HW. Nema smysl se pokouset o vlastni implementaci ML algoritmu na CPU. 99% usivatelskeho ekosystemu a tutorialu je v Pythonu. Pokud Vam nekdo radi C++ nebo Go "protoze je to rychlejsi", nema poneti, o cem mluvi.
« Poslední změna: 02. 04. 2023, 14:31:13 od Google CTCCTCGGCGGGCACGTAG »


alex6bbc

  • *****
  • 1 446
    • Zobrazit profil
    • E-mail
Re:Jazyk pro ML
« Odpověď #5 kdy: 02. 04. 2023, 15:24:36 »
taky mam radi ceckovou syntaxi, nez python, proto bych dal prednost golangu.

ale to je vec nazoru.

ale c/c++ nauci cloveka i to co je schovano hloubeji.

Re:Jazyk pro ML
« Odpověď #6 kdy: 02. 04. 2023, 15:55:53 »
Strojove uceni ma smysl jen na GPU nebo jinem specializovanem HW. Nema smysl se pokouset o vlastni implementaci ML algoritmu na CPU. 99% usivatelskeho ekosystemu a tutorialu je v Pythonu. Pokud Vam nekdo radi C++ nebo Go "protoze je to rychlejsi", nema poneti, o cem mluvi.

Taktak. Třeba když vlezu na TensorFlow.org a zajímá mě reference API, dostanu se by default na variantu pro Python. Dokumentace pro C++ je hned vedle, v sousedním tabu, ale prostě první na ráně je Python. O tutorialech nemluvě.

Že ty knihovny co dělají rozhraní proti CUDA back-endu jsou kdesi vespod napsané nejspíš v C, to nehraje velkou roli.

A pokud by šlo o to, bavit se přes nějaké API třeba s natrénovaným GPT modelem, který provozuje nějaký dodavatel v cloudu, to je taky "někde jinde".

Snad mám jen trochu strach, zda doporučit ML jako směr studia člověku, který možná trochu začal programovat v nějakém procedurálním jazyku. Jednak z hlediska programátorských schopností, jednak třeba co do dostupnosti vhodných "námětů lákajících ke zpracování"...

jano6

Re:Jazyk pro ML
« Odpověď #7 kdy: 02. 04. 2023, 16:28:46 »
Nedavno jsem tu zalozil vlakno "Kde dal studovat" dal jsem na Vasi a meho okoli radu a rozhodl jsem se venovat ML. Chci se zeptat, jaky jazyk je vhodny. KLasicky, vsude radej (zejmena pro zacatecniky) Python. Me spis laka C++, hlavne pro hlubsi pochopeni a na nekterych pozicich (hodne v automative) to preferuji.

Sú dve možnosti, buď chcete a) vyvíjať ML algoritmy, alebo b) plánuteje tie ML algoritmy
využívať v praxi.

Na vývoj ML knižníc sa asi najviac používa C++. Avšak tu tých pozícií a možností je máličko. Tam súperí crème de la crème matematicky zdatných vývojárov. Ak by ste chceli ísť týmto smerom, tak by ste v tom už dávno mali jasno.

Čo sa týka využitia ML algoritmov v praxi, tam je síce najviac rozšírený Python, ale na jazyku
v skutočnosti nezáleží. Nielenže majú knižnice ako Tensorflow rozhrania aj pre iné jazyky (JS, Ruby, Julia, .NET ...) ale v súčasnosti existujú viaceré ML API.
https://nordicapis.com/10-powerful-ai-ml-apis/

Summa summarum, človek si môže zvoliť ľubovoľný, prakticky použiteľný jazyk.


jano6

Re:Jazyk pro ML
« Odpověď #8 kdy: 02. 04. 2023, 16:54:39 »
Citace
Jsem asi už starej na to, abych Python ocenil. Z těch nemnoha setkání si pamatuju v jeho historii jakési kotrmelce "doprovodné infrastruktury" (package management), na které se mi trochu těžko zapomíná.

To bolo kedysi. Dnes má Python package management vyriešený. Funguje to bez problémov.
Ináč, neexistencia repozitárov a manažmentu balíčkov Vám v C++ nevadí?

Citace
Ze vrozených charakterových vad bych zmínil "vymezení bloku v kódu hloubkou odsazení".

To sú ale len Vaše preferencie. To rozhodnie je je "charaktorová vada". Python má viacero nedokonalostí, ale odsadzovanie tam teda nepatrí. Medzi reálne neduhy Pythonu patria napr.
biedna podpora práce s dátumami a časom alebo biedna podpora funkcionálneho programovania.

Python beriem ako pragmatický jazyk. Chcete poslať SMS, vytvoriť graf, nakúpiť akcie, kryptomeny,
použiť openai, fuzzovať aplikáciu, automatizovať testovanie cez headless browser, softvérovo vytvoriť Cisco sieť? Na to všetko nájdete knižnicu v Pythone, bleskovo si to nainštalujete a v priebehu pár minút použijete.

Re:Jazyk pro ML
« Odpověď #9 kdy: 02. 04. 2023, 18:37:13 »
Citace
Jsem asi už starej na to, abych Python ocenil. Z těch nemnoha setkání si pamatuju v jeho historii jakési kotrmelce "doprovodné infrastruktury" (package management), na které se mi trochu těžko zapomíná.

To bolo kedysi. Dnes má Python package management vyriešený. Funguje to bez problémov.
Citace
Kéž by. Teprve ve chvíli, kdy se něco nevede tak, jak by mělo, tak člověk začne přicházet na to, jaký Goldbergův stroj pod tím "vyriešený" vlastně existuje.

Takže pár rantů:
- na úplném začátku mi zkušený kolega řekl, ať používám venv. No velmi brzy jsem pochopil, proč.
- pip už konečně umí upgradnout celý projekt?
- python3.11 není kompatibilní s 3.10, nebo "Currently, PyTorch on Windows only supports Python 3.7-3.9;" - wtf? Jako py2 vs py3 chápu, ale rozbití back kompatibility v 3.xx řadě?
- část projektu se dělá (doporučuje dělat) přes condu, část přes pip, a není to jen úlet, spíš pravidlo.
- sranda, když má člověk openssl, libgd, ... v systému, a ono mu to během instalace prerekvizit začne sosat privátní kopie do environmentu.
- když z nějakého důvodu binární wheel nedělá úplně to, co má, to teprve pak nastává veselí.

Re:Jazyk pro ML
« Odpověď #10 kdy: 02. 04. 2023, 19:24:58 »
To bolo kedysi. Dnes má Python package management vyriešený. Funguje to bez problémov.
Nedávno jsem přešel z jedné práce, kde jsem používal Javu, do jiné práce, kde se používá Python. Po pár týdnech s Poetry je "vyřešený" a "bez problémů" asi tak to poslední, co by mě napadlo :-) S Mavenem se to absolutně nedá srovnat, připadám si jak 20 let v minulosti...

Re:Jazyk pro ML
« Odpověď #11 kdy: 02. 04. 2023, 19:49:54 »
To bolo kedysi. Dnes má Python package management vyriešený. Funguje to bez problémov.
Nedávno jsem přešel z jedné práce, kde jsem používal Javu, do jiné práce, kde se používá Python. Po pár týdnech s Poetry je "vyřešený" a "bez problémů" asi tak to poslední, co by mě napadlo :-) S Mavenem se to absolutně nedá srovnat, připadám si jak 20 let v minulosti...

V Java svete je minimum nativnich zavislosti. Pro ML projekty je IMO nejlepsi pouzit docker.

Maor

Re:Jazyk pro ML
« Odpověď #12 kdy: 02. 04. 2023, 20:17:21 »
Jaky jazyk pro ML je snad uplne irelevantni. Pro nekoho kdo se bude nekde hlasit jako junior je jistota python, v tom jede kazda firma.
Pro nekoho, kdo chce umet latest and greatest, tak at se nauci Julii, je to rychlejsi jak Python, tutorialy jsou perfektni a casto srovnavaji to same s pythonem. Nevyhodou je, ze zadna knihovna neumi export do ONNX, takze delat v tom komercni vyvoj neni dobej napad.

Maor

Re:Jazyk pro ML
« Odpověď #13 kdy: 02. 04. 2023, 20:29:02 »
Tak mystifikuju, v Julii jde z fluxu vyexportovat onnx pomoci ONNXNaiveNASflux.

Re:Jazyk pro ML
« Odpověď #14 kdy: 02. 04. 2023, 21:39:40 »
Velká výhoda Pythonu je Jupyter, u nějakých věcí píšu věci přímo za chodu, hlavně u zpracování dat, testů atd. je to strašná výhoda.