Python Gateway v InterSystems IRIS

Tento článok je venovaný Python Gateway — komunitnému projektu s otvoreným zdrojovým kódom pre dátovú platformu InterSystems IRIS. Tento projekt umožňuje orchestráciu akýchkoľvek algoritmov strojového učenia vytvorených v jazyku Python (hlavné prostredie pre mnohých odborníkov na dáta), využívať množstvo hotových knižníc na rýchle vytváranie adaptívnych, robotizovaných analytických AI/ML riešení na platforme InterSystems IRIS. V tomto článku ukážem, ako môže InterSystems IRIS orchestráciou procesov v jazyku Python efektívne vykonávať obojsmerný prenos dát a vytvárať inteligentné biznis procesy.

Plán

  1. Úvod.
  2. Nástroje.
  3. Inštalácia.
  4. API.
  5. Interoperabilita.
  6. Jupyter Notebook.
  7. Záver.
  8. Odkazy.
  9. MLToolkit.

Úvod

Python je vysokoúrovňový programovací jazyk všeobecného zamerania, zameraný na zvýšenie produktivity vývojárov a čitateľnosti kódu. V tejto sérii článkov budem hovoriť o možnostiach využitia jazyka Python na platforme InterSystems IRIS, pričom hlavným zameraním tohto článku je využitie Pythonu ako jazyka na vytváranie a aplikáciu modelov strojového učenia.

Strojové učenie (ML) je trieda metód umelej inteligencie, ktorou je charakteristické nie priame riešenie úlohy, ale učenie sa v procese riešenia množstva podobných úloh.

Algoritmy a modely strojového učenia sa stávajú čoraz rozšírenejšími. Dôvodov je mnoho, ale všetko sa znižuje na prístupnosť, jednoduchosť a dosahovanie praktických výsledkov. Je klasifikácia alebo dokonca modelovanie neurónov novou technológiou?

Samozrejme, že nie, avšak v súčasnosti nie je potrebné písať stovky tisíc riadkov kódu na spustenie jedného modelu, a náklady na vytváranie a aplikovanie modelov sa neustále znižujú.

Nástroje sa vyvíjajú — aj keď nemáme úplne GUI orientované AI/ML nástroje, progres, ktorý sme pozorovali u mnohých ďalších tried informačných systémov, ako je BI (od písania kódu po používanie rámcov a GUI orientovaných konfigurovateľných riešení), sa prejavuje aj v nástrojoch na vytváranie AI/ML. Už sme prešli fázou písania kódu a dnes používame rámce na budovanie a školenie modelov.

Iné vylepšenia, ako napríklad možnosť rozšírenia predtrénovanej modelu, kedy koncový používateľ musí len dokončiť učenie modelu na svojich špecifických dátach, tiež uľahčujú začiatok použitia strojového učenia. Tieto pokroky výrazne zjednodušujú učenie strojového učenia ako pre odborníkov, tak aj pre firmy ako celok.

Na druhej strane zbierame čoraz viac dát. Vďaka jednotnej dátovej platforme, ako je InterSystems IRIS, môžu byť všetky tieto informácie okamžite spracované a použité ako vstupné dáta pre modely strojového učenia.

S prechodom do cloudu je spúšťanie projektov AI/ML jednoduchšie ako kedykoľvek predtým. Môžeme spotrebovávať len tie zdroje, ktoré potrebujeme. Navyše, vďaka paralelizácii, ktorú ponúkajú cloudové platformy, môžeme ušetriť čas.

Ale čo výsledky? Tu sa to komplikuje. Existuje množstvo nástrojov na modelovanie, o ktorých sa budem ďalej zmieňovať. Vytvoriť dobrý model nie je jednoduché, ale čo ďalej? Získanie zisku z využívania modelu firmou je tiež netriviálna úloha. Jadro problému spočíva v oddelení analytických a transakčných záťaží a modelov dát. Keď trénujeme model, zvyčajne to robíme na historických dátach. Ale miesto pre vytvorený model je v transakčnom spracovaní dát. Čo je dobré na najlepšom modeli na detekciu podvodných transakcií, ak ho spúšťame raz za deň? Podvodníci už dávno odišli s peniazmi. Musíme trénovať model na historických dátach, ale musíme ho tiež aplikovať v reálnom čase na nových prichádzajúcich dátach, aby naše obchodné procesy mohli fungovať v súlade s predpokladmi, ktoré model vytvoril.

ML Toolkit je súbor nástrojov, ktorého cieľom je práve to: spojiť modely a transakčné prostredie, aby sa vytvorené modely mohli ľahko používať priamo vo vašich obchodných procesoch. Python Gateway je súčasťou ML Toolkit a zabezpečuje integráciu s jazykom Python (podobne ako R Gateway, ktorá je súčasťou ML Toolkit a zabezpečuje integráciu s jazykom R).

Nástroj

Predtým, ako budeme pokračovať, chcel by som opísať niekoľko nástrojov a knižníc pre Python, ktoré budeme neskôr používať.

Technológie

  • Python je interpretovaný, vysokohodnotový programovací jazyk všeobecného použitia. Hlavnou výhodou jazyka je veľká knižnica matematických, ML- a AI-knižníc. Rovnako ako ObjectScript, je to objektovo orientovaný jazyk, ale všetko je definované dynamicky, nie staticky. Všetko je tiež objektom. Neskoršie články predpokladajú krátke zoznámenie s jazykom. Ak chcete začať s učením, odporúčam začať s dokumenácie.
  • Pre naše nasledujúce cvičenia nainštalujte Python 3.6.7 64 bit.
  • IDE: Používam PyCharm, ale všeobecne ich veľa. Ak používate Atelier, existuje Eclipse plugin pre vývojárov na Python. Ak používate VS Code, existuje rozšírenie pre Python.
  • Notebook: namiesto IDE môžete písať a zdieľať svoje skripty v online notebookoch. Najpopulárnejší z nich je Jupyter.

Knižnice

Tu je (neúplný) zoznam knižníc pre strojové učenie:

  • Numpy — základný balík pre presné výpočty.
  • Pandas — vysoko výkonné dátové štruktúry a nástroje analýzy dát.
  • Matplotlib — tvorba grafov.
  • Seaborn — vizualizácia dát založená na matplotlib.
  • Sklearn — metódy strojového učenia.
  • XGBoost — algoritmy strojového učenia v rámci metodológie gradientného boostingu (Gradient Boosting).
  • Gensim — NLP.
  • Keras — neurónové siete.
  • Tensorflow — platforma na vytváranie modelov strojového učenia.
  • PyTorch — platforma na vytváranie modelov strojového učenia zameraná na Python.
  • Nyoka — PMML z rôznych modelov.

Technológie AI/ML umožňujú zvýšiť efektívnosť a prispôsobivosť podnikania. Navyše, dnes sa tieto technológie stávajú jednoduchšími na vývoj a implementáciu. Začnite sa učiť technológie AI/ML a ako môžu pomôcť vašej organizácii rásť.

Inštalácia

Existuje niekoľko spôsobov, ako nainštalovať a používať Python Gateway:

  • OS
    • Windows
    • Linux
    • Mac
  • Docker
    • Použite obraz z DockerHub
    • Vytvorte si svoj vlastný obraz

Bez ohľadu na spôsob inštalácie budete potrebovať zdrojový kód. Jediné miesto na stiahnutie kódu je stránka vydaní. Obsahuje testované stabilné verzie, jednoducho si vezmite poslednú. V súčasnosti je to 0.8, ale časom budú aj nové. Neklonujte/nahrávajte repozitár, stiahnite posledné vydanie.

OS

Ak inštalujete Python Gateway do operačného systému, najprv (bez ohľadu na operačný systém) musíte nainštalovať Python. Na to:

  1. Nainštalujte Python 3.6.7 64 bit. Odporúča sa nainštalovať Python do predvoleného adresára.
  2. Nainštalujte modul dill: pip install dill.
  3. Stiahnite kód ObjectScript (t.j. do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) do akejkoľvek oblasti s produktmi. V prípade, že chcete, aby existujúca oblasť podporovala produkty, vykonajte: write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. Umístite callout DLL/SO/DYLIB do složky bin vašej inštancie InterSystems IRIS. Súbor knižnice by mal byť dostupný na ceste, ktorá sa vracia write ##class(isc.py.Callout).GetLib().

Windows

  1. Uistite sa, že premenná prostredia PYTHONHOME ukazuje na Python 3.6.7.
  2. Uistite sa, že systémová premenná prostredia PATH súvisí s premennou PYTHONHOME (alebo adresárom, na ktorý ukazuje).

Linux (Debian/Ubuntu)

  1. Skontrolujte, či premenná prostredia PATH obsahuje /usr/lib a /usr/lib/x86_64-linux-gnu. Použite súbor /etc/environment na nastavenie premenných prostredia.
  2. V prípade chýb undefined symbol: _Py_TrueStruct nastavte konfiguračnú hodnotu PythonLib. Rovnako v Readme je sekcia Troubleshooting.

Mac

  1. V aktuálnom čase je podporovaný len Python 3.6.7 z Python.org.Skontrolujte premennú PATH.

Ak ste menili premenné prostredia, reštartujte váš produkt InterSystems.

Docker

Použitie kontajnerov má niekoľko výhod:

  • Prenosnosť
  • Efektivita
  • Izolácia
  • Ľahkosť
  • Immutabilita

Prečítajte si tento súbor článkov pre podrobnejšie informácie o používaní Dockeru s produktmi InterSystems.

Všetky zostavy Python Gateway sú v súčasnosti založené na kontajneroch. 2019.4.

Hotový obraz

Vykonajte: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latest, aby ste načítali a spustili Python Gateway s InterSystems IRIS Community Edition. To je všetko.

Vytvorte si svoj vlastný obraz

Na zostavenie docker obrazu vykonajte v koreňovom adresári repozitára: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
Predvolene sa obraz zostavuje na základe obrazu store/intersystems/iris-community:2019.4.0.383.0, ale môžete to zmeniť nastavením premennej IMAGE..
Na zostavenie z InterSystems IRIS vykonajte: `docker build —build-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 —force-rm —tag intersystemscommunity/irispy:latest.

Potom môžete spustiť docker obraz:

docker run -d 
  -p 52773:52773 
  -v //:/mount 
  --name irispy 
  intersystemscommunity/irispy:latest 
  --key /mount/iris.key

Ak používate obraz založený na InterSystems IRIS Community Edition, nemusíte uvádzať kľúč.

Komentáre

  • Testovací proces isc.py.test.Process uchováva množstvo obrázkov v dočasnom adresári. Možno budete chcieť zmeniť túto cestu na pripojený adresár. Na to upravte nastavenia WorkingDir stanovením pripojenej adresárovej štruktúry.
  • Na prístup k terminálu zadajte: docker exec -it irispy sh.
  • Prístup k Portálu Správy Systému je cez používateľské meno SuperUser/SYS.
  • Ak chcete zastaviť kontajner, zadajte: docker stop irispy && docker rm --force irispy.

Kontrola inštalácie

Po tom, čo ste nainštalovali Python Gateway, je dobré skontrolovať, že funguje. Spustite tento kód v termináli InterSystems IRIS:

set sc = ##class(isc.py.Callout).Setup() 
set sc = ##class(isc.py.Main).SimpleString("x='HELLO'", "x", , .var).
write var

V dôsledku toho by sa malo zobraziť HELLO — hodnota Python premennej x. Ak je vrátený status sc je chyba alebo var prázdny, skontrolujte Readme — sekcia Riešenie problémov.

API

Python Gateway je nainštalovaný a overili ste, že funguje. Je čas začať ho používať!
Hlavné rozhranie k Pythonu je isc.py.Main. Ponúka nasledujúce skupiny metód (všetky vracajú %Status):

  • Spustenie kódu
  • Prenos dát
  • Pomocné

Spustenie kódu

Tieto metódy umožňujú vykonávať ľubovoľný Python kód.

SimpleString

SimpleString — to je základná metóda. Akceptuje 4 voliteľné argumenty:

  • code — reťazec kódu na vykonanie. Symbol prechodu do nového riadku: $c(10).
  • returnVariable — názov premennej pre návrat.
  • serialization — ako serializovať returnVariable. 0 — reťazec (predvolené), 1 — repr.
  • result — ByRef odkaz na premennú, do ktorej sa ukladá hodnota returnVariable.

Hore sme vykonali:

set sc = ##class(isc.py.Main).SimpleString("x='HELLO'", "x", , .var).

V tomto príklade priraďujeme premennú Python x hodnota Ahoj a chceme vrátiť hodnotu Python premennej x do ObjectScript premennej var.

ExecuteCode

ExecuteCode je bezpečnejšia a menej obmedzená alternatíva SimpleString.
Reťazce v platforme InterSystems IRIS sú obmedzené na 3 641 144 znakov, a ak chcete vykonávať dlhší kód, musíte použiť prúdy.
Prijíma dva argumenty:

  • code — reťazec alebo prúd Python kódu na vykonanie.
  • variable — (voliteľne) priraďuje výsledok vykonania code tejto Python premennej.

Príklad použitia:

set sc = ##class(isc.py.Main).ExecuteCode("2*3", "y").

V tomto príklade násobíme 2 krát 3 a uložíme výsledok do Python premennej y.

Prenos dát

Odovzdajte údaje do Python a späť.

Python -> InterSystems IRIS

Existujú 4 spôsoby, ako získať hodnotu Python premennej v InterSystems IRIS, v závislosti od potrebnej serializácie:

  • String pre jednoduché dátové typy a ladenie.
  • Repr na ukladanie jednoduchých objektov a ladenie.
  • JSON na jednoduché manipulovanie s údajmi na strane InterSystems IRIS.
  • Pickle na uchovanie objektov.

Tieto metódy umožňujú získanie premenných z Pythonu vo forme reťazca alebo prúdov.

  • GetVariable(variable, serialization, .stream, useString) — získať serialization premenná variable v stream. Ak useString rovná 1 a serializácia je vložená do reťazca, takže sa vráti reťazec a nie prúd.
  • GetVariableJson(variable, .stream, useString) — získať JSON serializáciu premennej.
  • GetVariablePickle(variable, .stream, useString, useDill) -získať Pickle (alebo Dill) serializáciu premennej.

Skúsme získať našu premennú y.

set sc = ##class(isc.py.Main).GetVariable("y", , .val, 1)
write val
>6

InterSystems IRIS -> Python

Načítavame údaje z InterSystems IRIS do Pythonu.

  • ExecuteQuery(query, variable, type, namespace) — vytvára súbor údajov (pandas dataframe alebo list) z sql dopytu a nastavuje ho na Python premennú variable. Balík isc.py musí byť dostupný v oblasti namespace — tam sa vykoná dopyt.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) — načítava údaje globálu global od subskriptu start do end do Pythonu ako premennú typu type: list, alebo pandas dataframe. Popis voliteľných argumentov maskovať a labels je dostupný v dokumentácii triedy a repozitáriu Dokumentácia prenosu dát.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) — načítava údaje triedy class od id start do end do Pythonu ako premennú typu type: list, alebo pandas dataframe. properties — zoznam (oddeľovač — čiarka) vlastností triedy, ktoré sa majú načítať do súboru údajov. Masky sú podporované. * a ?. Predvolená hodnota — * (všetky vlastnosti). Vlastnosť %%CLASSNAME sa ignoruje.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) — načítava údaje tabuľky table od id start do end do Pythonu.

ExecuteQuery — je univerzálny (akýkoľvek platný SQL dopyt bude odoslaný do Pythonu). Avšak, ExecuteGlobal a jeho obálky ExecuteClass a ExecuteTable majú určité obmedzenia. Sú oveľa rýchlejšie (3-5 krát rýchlejšie ako ODBC ovládač a 20 krát rýchlejšie ExecuteQuery). Ďalšie informácie v Dokumentácia prenosu dát.
Všetky tieto metódy podporujú prenos údajov z akejkoľvek oblasti. Balík isc.py musí byť v cieľovej oblasti dostupný.

ExecuteQuery

ExecuteQuery(request, variable, type, namespace) — prenos výsledkov akéhokoľvek platného SQL dopytu na Python. Toto je najpomalšia metóda prenosu údajov. Použite ju, ak ExecuteGlobal a jeho obálky nie sú dostupné.

Argumenty:

  • query — sql dopyt.
  • variable — názov Python premennej, do ktorej sa zapisujú údaje.
  • type — list alebo Pandas dataframe.
  • namespace — oblasť, v ktorej sa bude vykonávať dopyt.

ExecuteGlobal

ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) — prenos globálu do Pythonu.

Argumenty:

  • global — názov globálu bez ^
  • variable — názov Python premennej, do ktorej sa zapisujú údaje.
  • type — list alebo Pandas dataframe.
  • start — prvý subskript globálu. Povinne %Integer.
  • end — posledný subskript globálu. Povinne %Integer.
  • maskovať — maska hodnôt globálnej premennej. Maska môže byť kratšia ako počet polí v globále (v tomto prípade budú posledné polia preskočené). Ako formátovať masku:
    • + predať hodnotu tak, ako je.
    • - preskočiť hodnotu.
    • b — Logický typ (0 — False, všetko ostatné — Pravda).
    • d — Dátum (od $horolog, na Windows od 1970, na Linux od 1900).
    • t — Čas ($horolog, sekundy po polnoci).
    • m — Časová pečiatka (reťazec vo formáte ROK-MESECI-DEN HODINA:MINÚTA:SEKUNDA).
  • labels — %Zoznam názvov stĺpcov. Prvým prvkom je názov subskriptu.
  • namespace — oblasť, v ktorej sa bude vykonávať dopyt.

ExecuteClass

Obal na ExecuteGlobal. Na základe definície triedy pripravuje volanie ExecuteGlobal a volá ho.

ExecuteClass(class, variable, type, start, end, properties, namespace) — odovzdávanie dát triedy v Pythone.

Argumenty:

  • class — meno triedy
  • variable — názov Python premennej, do ktorej sa zapisujú údaje.
  • type — list alebo Pandas dataframe.
  • start — počiatočný Id.
  • end — konečný Id
  • properties — zoznam (oddeľovač — čiarka) vlastností triedy, ktoré sa majú načítať do súboru údajov. Masky sú podporované. * a ?. Predvolená hodnota — * (všetky vlastnosti). Vlastnosť %%CLASSNAME sa ignoruje.
  • namespace — oblasť, v ktorej sa bude vykonávať dopyt.

Všetky vlastnosti sa odovzdávajú tak, ako sú, okrem vlastností typov te, %Čas, %Logická hodnota a %Časová pečiatka — sú konvertované do zodpovedajúcich tried Pythonu.

ExecuteTable

Obal na ExecuteClass. Prevodí názov tabuľky na názov triedy a volá ExecuteClass. Podpis:

ExecuteTable(table, variable, type, start, end, properties, namespace) — odovzdávanie dát tabuľky v Pythone.

Argumenty:

  • table — názov tabuľky.
    Všetky ostatné argumenty sa odovzdávajú tak, ako sú, do ExecuteClass.

Poznámky

  • ExecuteGlobal, ExecuteClass a ExecuteTable pracujú rovnako rýchlo.
  • ExecuteGlobal 20-krát rýchlejšie ako ExecuteQuery na veľkých množstvách dát (čas prenosu viac ako >0.01 sekundy).
  • ExecuteGlobal, ExecuteClass a ExecuteTable pracujú na globáloch s touto štruktúrou: ^global(kľúč) = $lb(prop1, prop2, ..., propN) kde kľúč — celé číslo.
  • Pre ExecuteGlobal, ExecuteClass a ExecuteTable podporovaný rozsah hodnôt te zodpovedá rozsahu mktime a závisí od OS (windows: 1970-01-01, linux 1900-01-01, mac). Použite %Časová pečiatkana odovzdanie dát mimo tohto rozsahu alebo použite pandas dataframe, pretože toto obmedzenie platí len pre zoznam.
  • Pre ExecuteGlobal, ExecuteClass a ExecuteTable všetky argumenty okrem zdroja dát (globály, triedy alebo tabuľky) a premenná sú voliteľné.

Príklady

Testovacia trieda isc.py.test.Person obsahuje metódu, ktorá demonštruje všetky možnosti odovzdávania dát:

nastavte global = "isc.py.test.PersonD"
nastavte triedu = "isc.py.test.Person"
nastavte tabuľku = "isc_py_test.Person"
nastavte dotaz = "SELECT * FROM isc_py_test.Person"

// Spoločné argumenty
nastavte premennú = "df"
nastavte typ = "dataframe"
nastavte začiatok = 1
nastavte koniec = $g(^isc.py.test.PersonD, začiatok)

// Spôsob 0: ExecuteGlobal bez argumentov
nastavte sc = ##class(isc.py.Main).ExecuteGlobal(global, premenná _ 0, typ)

// Spôsob 1: ExecuteGlobal s argumentmi
// Pri prenose globálnej premennej sa názvy polí zadávajú ručne
// globalKey - názov subscriptu
nastavte popisky = $lb("globalKey", "Názov", "DOB", "TS", "RandomTime", "AgeYears", "AgeDecimal", "AgeDouble", "Bool")

// mask obsahuje o 1 prvok menej ako popisky, pretože "globalKey" - názov subskryptu
// Vynechávame %%CLASSNAME
nastavte maska = "-+dmt+++b"

nastavte sc = ##class(isc.py.Main).ExecuteGlobal(global, premenná _ 1, typ, začiatok, koniec, maska, popisky)

// Spôsob 2: ExecuteClass
nastavte sc = ##class(isc.py.Main).ExecuteClass(trieda, premenná _ 2, typ, začiatok, koniec)

// Spôsob 3: ExecuteTable
nastavte sc = ##class(isc.py.Main).ExecuteTable(tabuľka, premenná _ 3, typ, začiatok, koniec)

// Spôsob 4: ExecuteTable
nastavte sc = ##class(isc.py.Main).ExecuteQuery(dotaz, premenná _ 4, typ)

Zavolajte metódu do ##class(isc.py.test.Person).Test() aby ste videli, ako fungujú všetky metódy prenosu dát.

Pomocné metódy

  • GetVariableInfo(premenná, serializácia, .definovaná, .typ, .dĺžka) — získať informácie o premennej: či je definovaná, trieda a dĺžka serializácie.
  • GetVariableDefined(premenná, .definovaná) — či je premenná definovaná.
  • GetVariableType(premenná, .typ) — získať triedu premennej.
  • GetStatus() — získať a odstrániť poslednú výnimku na strane Pythonu.
  • GetModuleInfo(modul, .importovaný, .alias) — získať premennú modulu a stav importu.
  • GetFunctionInfo(funkcia, .definovaná, .typ, .dokumentácia, .podpis, .argumenty) — získať informácie o funkcii.

Interoperabilita

Naučili ste sa volať Python Gateway z terminálu, teraz začneme používať ho v produkcii. Základ interakcie s Python v tomto režime je isc.py.ens.Operation. Umožňuje nám:

  • Spúšťať kód na Pythone
  • Ukladať/Obnovovať kontext Pythonu
  • Načítať a získať údaje z Pythonu

V podstate, operácia Python je obal nad isc.py.Main. Operácia isc.py.ens.Operation umožňuje interakciu s procesom Python z produktov InterSystems IRIS. Podporuje päť typov požiadaviek:

  • isc.py.msg.ExecutionRequest na vykonanie Python kódu. Vráti isc.py.msg.ExecutionResponse s výsledkom vykonania a hodnotami požadovaných premenných.
  • isc.py.msg.StreamExecutionRequest na vykonanie Python kódu. Vráti isc.py.msg.StreamExecutionResponse s výsledkom vykonania a hodnotami požadovaných premenných. Analóg isc.py.msg.ExecutionRequest, ale prijíma a vracia prúdy namiesto reťazcov.
  • isc.py.msg.QueryRequest na prenos výsledku vykonania SQL dotazu. Vráti Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest na prenášanie dát globálneho/kontrolného/záznamového. Vráti Ens.Response.
  • isc.py.msg.SaveRequest na uloženie kontextu Pythonu. Vráti Ens.StringResponse s identifikátorom kontextu.
  • isc.py.msg.RestoreRequest na obnovenie kontextu Pythonu.

    Okrem toho, isc.py.ens.Operation má dva nastavenia:

    • Initializer — výber triedy implementujúcej rozhranie isc.py.init.Abstract. Môže byť použitý na načítanie funkcií, modulov, tried a podobne. Vykonáva sa iba raz pri spustení procesu.
    • PythonLib — (iba pre Linux) ak vidíte chyby pri načítaní, nastavte jeho hodnotu na libpython3.6m.so alebo dokonca na úplnú cestu k knižnici Python.

Vytváranie obchodných procesov

Existujú dve triedy, ktoré uľahčujú vývoj obchodných procesov:

  • isc.py.ens.ProcessUtils umožňuje extrahovať anotácie z aktivít so substitúciou premenných.
  • isc.py.util.BPEmulator umožňuje jednoducho testovať obchodné procesy s Python. Môže vykonávať obchodný proces (časti v jazyku Python) v aktuálnom procese.

Zamieňanie premenných

Všetky obchodné procesy, ktoré dedí od isc.py.ens.ProcessUtils, môžu používať metódu GetAnnotation(name) na získanie hodnoty anotácie aktivity podľa jej názvu. Anotácia aktivity môže obsahovať premenné, ktoré budú vypočítané na strane InterSystems IRIS pred odoslaním do Python. Tu je syntax substitúcie premenných:

  • ${class:method:arg1:...:argN} — volanie metódy
  • #{expr} — vykonať kód v ObjectScript.

Príklad je k dispozícii v testovacom obchodnom procese isc.py.test.Process, napríklad v aktivite Maticová korelácia: Graf: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). V tomto príklade:

  • #{process.WorkDirectory} vracia vlastnosť WorkDirectory objektu process, ktorý je inštanciou triedy isc.py.test.Process t.j. aktuálneho obchodného procesu.
  • ${%PopulateUtils:Integer:1:100} vyvoláva metódu Integer triedy %PopulateUtils, posielajúc argumenty 1 a 100, vracia náhodné celé číslo v rozsahu 1...100.

Testovací obchodný proces

Testový produkt a testovací obchodný proces sú k dispozícii predvolene ako súčasť Python Gateway. Na ich použitie:

  1. V termináli OS vykonajte: pip install pandas matplotlib seaborn.
  2. V termináli InterSystems IRIS vykonajte: do ##class(isc.py.test.CannibalizationData).Import() na naplnenie testovacích údajov.
  3. Spustite produkt isc.py.test.Production.
  4. Odoslať požiadavku typu Ens.Request v isc.py.test.Process.

Pozrime sa, ako to všetko funguje dohromady. Otvorte isc.py.test.Process v editore BPL:

Python Gateway v InterSystems IRIS

Spustenie kódu

Najdôležitejším volaním je vykonanie kódu Python:

Python Gateway v InterSystems IRIS

Používa sa požiadavka isc.py.msg.ExecutionRequest, tu sú jej vlastnosti:

  • Kód — kód Python.
  • SeparateLines — rozdeľovať kód na riadky na vykonanie. $c(10) (n) slúži na rozdelenie riadkov. Upozorňujeme, že NIE je odporúčané spracovávať správu celú naraz, táto funkcia je určená iba na spracovanie def a podobných viacerých výrazov. Predvolene 0.
  • Premenné — zoznam premenných oddelených čiarkami, ktoré budú pridané do odpovede.
  • Serialization — Ako serializovať premenné, ktoré chceme vrátiť. Možnosti: Str, Repr, JSON, Pickle a Dill, predvolene Str.

V našom prípade len nastavujeme vlastnosť Kód, takže všetky ostatné vlastnosti používajú predvolené hodnoty. Nastavujeme ju volaním process.GetAnnotation("Import pandas"), ktorá pri behu vracia anotáciu po vykonaní substitúcie premenných. Nakoniec bude kód import pandas as pd odovzdaný do Pythonu. GetAnnotation môže byť užitočná na získanie viacerých riadkových skriptov Python, ale neexistujú žiadne obmedzenia na tento spôsob získania kódu. Môžete nastaviť vlastnosť Kód akýmkoľvek spôsobom, ktorý vám vyhovuje.

Získavanie premenných

Ďalší zaujímavý výzvou s použitím isc.py.msg.ExecutionRequest — Correlation Matrix: Tabular:

Python Gateway v InterSystems IRIS

Vypočítava Matricu Korelácie na strane Python a extrahuje premennú corrmat späť do InterSystems IRIS vo formáte JSON, prostredníctvom nastavenia vlastností požiadavky:

  • Premenné: "corrmat"
  • Serialization: "JSON"

Môžeme vidieť výsledky v Visual Trace:

Python Gateway v InterSystems IRIS

A ak potrebujeme túto hodnotu v BP, môžeme ju získať takto: callresponse.Variables.GetAt("corrmat").

Prenos dát

Ďalej sa budeme rozprávať o prenose údajov z InterSystems IRIS do Python, všetky požiadavky na prenos údajov realizujú rozhranie isc.py.msg.DataRequest, ktoré poskytuje nasledujúce vlastnosti:

  • Variable — Python premenná, do ktorej sa zapisujú dáta.
  • Typ — typ premennej: dataframe (pandas dataframe) alebo list.
  • Namespace — oblasť, z ktorej získavame dáta. Balík isc.py musí byť dostupný v tejto oblasti. Môže to byť oblasť bez podpory produktov.

Na základe tohto rozhrania sú implementované 4 triedy požiadaviek:

  • isc.py.msg.QueryRequest — nastavte vlastnosť Query na prenos SQL požiadavky.
  • isc.py.msg.ClassRequest — nastavte vlastnosť Class na prenos údajov triedy.
  • isc.py.msg.TableRequest — nastaviť vlastnosť Table na prenos údajov tabuľky.
  • isc.py.msg.GlobalRequest — nastaviť vlastnosť Global na prenos údajov globálnej premennej.

V teste sledujte aktivitu RAW, kde isc.py.msg.QueryRequest zobrazenú v akcii.

Python Gateway v InterSystems IRIS

Uloženie/obnovenie kontextu Python

Napokon môžeme uložiť kontext Python v InterSystems IRIS, aby sme to urobili, pošleme isc.py.msg.SaveRequest s argumentmi:

  • Mask — Ukladajú sa len premenné, ktoré vyhovujú maske. Podporujú sa * a ?. Príklad: "Data*, Figure?". Ako predvolené *.
  • MaxLength — Maximálna dĺžka uchovávanej premennej. Ak je serializácia premennej dlhšia, bude ignorovaná. Nastavte 0, aby ste získali premenné akejkoľvek dĺžky. Predvolene $$$MaxStringLength.
  • Názov — Názov kontextu (voliteľné).
  • Description — Popis kontextu (voliteľné).

Vracia Ens.StringResponse s Id uloženého kontextu. V testovacom procese sledujte aktivitu Uložiť kontext.

Príslušný požiadavok isc.py.msg.RestoreRequest na načítanie kontextu z InterSystems IRIS do Pythonu:

  • ContextId — identifikátor kontextu.
  • Vymazať — vyčistiť kontext pred obnovením.

Jupyter Notebook

Jupyter Notebook — je to webová aplikácia s otvoreným zdrojovým kódom, ktorá umožňuje vytvárať notebooky obsahujúce kód, vizualizácie a text a publikovať ich. Python Gateway umožňuje zobraziť a upravovať BPL procesy vo forme Jupyter Notebook. Všimnite si, že sa v súčasnosti používa bežný vykonávateľ Python 3.

Toto rozšírenie predpokladá, že anotácie obsahujú kód Python a používajú názvy aktivít ako predchádzajúce nadpisy. Teraz je možné vyvíjať obchodné procesy PythonGateway v Jupyter Notebook. Tu je, čo je možné:

  • Vytvárať nové obchodné procesy
  • Odstraňovať obchodné procesy
  • Vytvárať nové aktivity
  • Upravovať aktivity
  • Odstraňovať aktivity

Tu sú demo-video. A niekoľko snímok obrazovky:

Sprievodca procesmi

Python Gateway v InterSystems IRIS

Editor procesu

Python Gateway v InterSystems IRIS

Inštalácia

  1. Budete potrebovať InterSystems IRIS 2019.2+.
  2. Nainštalujte PythonGateway v0.8+ (vyžaduje iba isc.py.util.Jupyter, isc.py.util.JupyterCheckpoints a isc.py.ens.ProcessUtils).
  3. Aktualizujte kód ObjectScript z repozitára.
  4. Vykonajte do ##class(isc.py.util.Jupyter).Install() a riaďte sa pokynmi.

Dokumentácia.

Zhrnutie

MLToolkit je súbor nástrojov, ktorého cieľom je kombinovať modely a transakčné prostredie, aby boli vytvorené modely ľahko použiteľné priamo vo vašich obchodných procesoch. Python Gateway je súčasťou MLToolkit a zabezpečuje integráciu s jazykom Python, čo umožňuje orchestráciu akýchkoľvek algoritmov strojového učenia vytvorených v jazyku Python (hlavné prostredie pre mnohých odborníkov na dáta) a využívať množstvo pripravených knižníc na rýchle vytváranie adaptabilných, robotických analytických AI/ML riešení na platforme InterSystems IRIS.

Odkazy

MLToolkit

Skupina používateľov MLToolkit je súkromný GitHub repozitár, ktorý bol vytvorený ako súčasť firemnej GitHub organizácie InterSystems. Je určený externým používateľom, ktorí inštalujú, študujú alebo už používajú komponenty MLToolkit, vrátane Python Gateway. V skupine je k dispozícii množstvo implementovaných prípadových štúdií (so zdrojovým kódom a testovacími údajmi) v oblastiach marketingu, výroby, medicíny a mnohých ďalších odvetviach. Ak sa chcete pripojiť k skupine používateľov ML Toolkit, prosím, pošlite krátku správu na e-mailovú adresu: MLToolkit@intersystems.com a vo svojom e-maile uveďte nasledujúce údaje:

  • Používateľské meno GitHub
  • Organizácia (v ktorej pracujete alebo študujete)
  • Pozícia (vaša skutočná funkcia vo vašej organizácii, alebo "Študent", alebo "Nezávislý").
  • Krajina

Tým, ktorí prečítali článok a majú záujem o možnosti InterSystems IRIS ako platformy na vývoj alebo hosting mechanizmov umelej inteligencie a strojového učenia, ponúkame diskusiu o možných scenároch, ktoré sú pre vašu firmu zaujímavé. Radi preskúmame potreby vašej firmy a spoločne určíme plán akcií; kontaktná e-mailová adresa našej expertné skupiny AI/ML je: MLToolkit@intersystems.com.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster