Python Gateway bij InterSystems IRIS

Dit artikel gaat over Python Gateway, een open source communityproject voor het InterSystems IRIS-dataplatform. Met dit project kun je alle machine learning-algoritmen die zijn gemaakt in Python (de belangrijkste omgeving voor veel datawetenschappers) orkestreren en talloze kant-en-klare bibliotheken gebruiken om snel adaptieve, robotachtige analytische AI/ML-oplossingen te creëren op het InterSystems IRIS-platform. In dit artikel laat ik zien hoe InterSystems IRIS processen in Python kan orkestreren, efficiënt tweerichtingsgegevens kan communiceren en intelligente bedrijfsprocessen kan creëren.

plan

  1. Inleiding.
  2. Gereedschap.
  3. Installatie.
  4. API.
  5. Interoperabiliteit.
  6. Jupyter-notitieboekje.
  7. Conclusies.
  8. Koppelingen.
  9. MLToolkit.

Introductie

Python is een hoogwaardige programmeertaal voor algemene doeleinden, gericht op het verbeteren van de productiviteit van ontwikkelaars en de leesbaarheid van code. In deze serie artikelen bespreek ik de mogelijkheden van het gebruik van Python op het InterSystems IRIS-platform, waarbij de nadruk van dit artikel ligt op het gebruik van Python als taal voor het maken en uitvoeren van machine learning-modellen.

Machine learning (ML) is een klasse van kunstmatige intelligentiemethoden, waarvan het karakteristieke kenmerk niet de directe oplossing van een probleem is, maar het leren tijdens het oplossen van veel soortgelijke problemen.

Machine learning-algoritmen en -modellen worden steeds gebruikelijker. Daar zijn veel redenen voor, maar het komt allemaal neer op toegankelijkheid, eenvoud en het behalen van praktische resultaten. Is clustering of zelfs neurale netwerkmodellering een nieuwe technologie?

Natuurlijk niet, maar tegenwoordig is het niet meer nodig om honderdduizenden regels code te schrijven om één enkel model uit te voeren, en de kosten voor het maken en gebruiken van modellen worden steeds lager.

Tools evolueren - hoewel we niet over volledig GUI-centrische AI/ML-tools beschikken, is de vooruitgang die we hebben gezien bij veel andere klassen van informatiesystemen, zoals BI (van het schrijven van code tot het gebruik van raamwerken en GUI-centrische configureerbare oplossingen), wel wordt ook waargenomen in tools voor het creëren van AI/ML. We zijn de fase van het schrijven van code al gepasseerd en vandaag de dag gebruiken we raamwerken om modellen te bouwen en te trainen.

Andere verbeteringen, zoals de mogelijkheid om een ​​vooraf getraind model te distribueren waarbij de eindgebruiker het model eenvoudigweg hoeft te trainen op basis van zijn specifieke gegevens, maken het ook gemakkelijker om aan de slag te gaan met machine learning. Deze vooruitgang maakt het leren van machinaal leren veel gemakkelijker, zowel voor professionals als voor bedrijven in het algemeen.

Aan de andere kant verzamelen we steeds meer data. Met een uniform dataplatform zoals InterSystems IRIS kan al deze informatie onmiddellijk worden voorbereid en gebruikt als invoer voor machine learning-modellen.

Met de overstap naar de cloud wordt het starten van AI/ML-projecten eenvoudiger dan ooit. We kunnen alleen de hulpbronnen consumeren die we nodig hebben. Bovendien kunnen we, dankzij de parallellisatie die door cloudplatforms wordt geboden, tijd besparen.

Maar hoe zit het met de resultaten? Dit is waar de zaken ingewikkelder worden. Er zijn veel hulpmiddelen voor het bouwen van modellen, die ik hierna zal bespreken. Een goed model bouwen is niet eenvoudig, maar hoe nu verder? Winst maken met het gebruik van een bedrijfsmodel is ook een niet-triviale taak. De wortel van het probleem is de scheiding tussen analytische en transactionele werklasten en datamodellen. Als we een model trainen, doen we dat meestal op basis van historische gegevens. Maar de plaats voor het geconstrueerde model ligt in de verwerking van transactionele gegevens. Wat heb je aan het beste detectiemodel voor frauduleuze transacties als we het één keer per dag gebruiken? De oplichters zijn al lang met het geld vertrokken. We moeten het model trainen op historische gegevens, maar we moeten het ook in realtime toepassen op nieuwe binnenkomende gegevens, zodat onze bedrijfsprocessen kunnen reageren op de voorspellingen van het model.

De ML Toolkit is een set tools die precies dat doel beoogt: modellen en een transactionele omgeving verenigen, zodat de gebouwde modellen eenvoudig direct in uw bedrijfsprocessen kunnen worden gebruikt. Python Gateway maakt deel uit van de ML Toolkit en biedt integratie met de Python-taal (vergelijkbaar met hoe R Gateway, als onderdeel van de ML Toolkit, integratie biedt met de R-taal).

Toolkit

Voordat we verder gaan, wil ik een paar Python-tools en -bibliotheken beschrijven die we later zullen gebruiken.

Technologie

  • Python is een geïnterpreteerde, algemene programmeertaal op hoog niveau. Het belangrijkste voordeel van de taal is de grote bibliotheek met wiskundige, ML- en AI-bibliotheken. Net als ObjectScript is het een objectgeoriënteerde taal, maar alles wordt dynamisch gedefinieerd in plaats van statisch. Ook is alles een object. Latere artikelen gaan uit van een voorbijgaande bekendheid met de taal. Als je wilt beginnen met leren, raad ik aan om ermee te beginnen documentatie.
  • Voor onze volgende oefeningen, stel in Python 3.6.7 64-bits.
  • ID: Ik gebruik PyCharm, maar over het algemeen zij много. Als je Atelier gebruikt, is er een Eclipse-plug-in voor Python-ontwikkelaars. Als u VS Code gebruikt, is er een extensie voor Python.
  • Notebook: In plaats van een IDE kunt u uw scripts schrijven en delen in online notitieblokken. De meest populaire is Jupiterpy.

bibliotheken

Hier is een (niet-uitputtende) lijst met machine learning-bibliotheken:

  • numpy — een fundamenteel pakket voor nauwkeurige berekeningen.
  • Pandas — hoogwaardige datastructuren en data-analyse-instrumenten.
  • matplotlib — het maken van grafieken.
  • zeegeborene — datavisualisatie op basis van matplotlib.
  • Sleren — methoden voor machinaal leren.
  • XGBoost — machine learning-algoritmen in het kader van de gradiëntversterkingsmethodologie.
  • gensim – NLP.
  • Keras - neurale netwerken.
  • tensorstroom — een platform voor het creëren van machine learning-modellen.
  • PyTorch is een platform voor het maken van machine learning-modellen, gericht op Python.
  • Nyoka - PMML uit diverse modellen.

AI/ML-technologieën maken het bedrijfsleven efficiënter en aanpasbaarder. Bovendien worden deze technologieën tegenwoordig steeds gemakkelijker te ontwikkelen en te implementeren. Leer meer over AI/ML-technologieën en hoe deze uw organisatie kunnen helpen groeien.

installatie

Er zijn verschillende manieren om Python Gateway te installeren en te gebruiken:

  • besturingssysteem
    • Dakramen en raamkozijnen
    • Linux
    • Mac
  • havenarbeider
    • Gebruik een afbeelding van DockerHub
    • Creëer je eigen look

Ongeacht de installatiemethode heeft u de broncode nodig. De enige plaats waar u de code kunt downloaden is releases pagina. Het bevat geteste stabiele releases, neem gewoon de nieuwste versie. Op dit moment is dat 0.8, maar op termijn komen er nieuwe bij. Kloon/download de repository niet, download de nieuwste release.

besturingssysteem

Als u Python Gateway op een besturingssysteem installeert, moet u eerst (ongeacht het besturingssysteem) Python installeren. Voor deze:

  1. Installeer Python 3.6.7 64 bit. Het wordt aanbevolen om Python in de standaardmap te installeren.
  2. Installeer de module dill: pip install dill.
  3. Download de ObjectScript-code (d.w.z. do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) naar elk gebied met producten. Als u wilt dat een bestaand gebied producten ondersteunt, voert u het volgende uit: write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. Plaats bijschrift DLL/SO/DYLIB naar map bin uw InterSystems IRIS-instantie. Het bibliotheekbestand moet beschikbaar zijn in het geretourneerde pad write ##class(isc.py.Callout).GetLib().

Dakramen en raamkozijnen

  1. Zorg ervoor dat de omgevingsvariabele PYTHONHOME verwijst naar Python 3.6.7.
  2. Zorg ervoor dat de systeemomgevingsvariabele is PATH bevat een variabele PYTHONHOME (of de map waarnaar het verwijst).

Linux (Debian/Ubuntu)

  1. Controleer of de omgevingsvariabele is PATH Het bevat /usr/lib и /usr/lib/x86_64-linux-gnu. Gebruik bestand /etc/environment omgevingsvariabelen instellen.
  2. In geval van fouten undefined symbol: _Py_TrueStruct stel de instelling in PythonLib. ook in readme er is een sectie Probleemoplossing.

Mac

  1. Momenteel wordt alleen Python 3.6.7 ondersteund python.org. Controleer de variabele PATH.

Als u omgevingsvariabelen hebt gewijzigd, start u uw InterSystems-product opnieuw op.

havenarbeider

Het gebruik van containers heeft een aantal voordelen:

  • draagbaarheid
  • effectiviteit
  • Isolatie
  • Lichtheid
  • Onveranderlijkheid

Kijk hier eens naar serie artikelen voor meer informatie over het gebruik van Docker met InterSystems-producten.

Alle Python Gateway-builds zijn momenteel op containers gebaseerd 2019.4.

Klaar beeld

Loop: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latestom Python Gateway te downloaden en uit te voeren met InterSystems IRIS Community Edition. Dat is alles.

Creëer je eigen look

Om een ​​docker-image te bouwen, voer je het uit in de root van de repository: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
Standaard wordt de afbeelding opgebouwd op basis van de afbeelding store/intersystems/iris-community:2019.4.0.383.0, maar u kunt dit wijzigen door een variabele in te stellen IMAGE.
Om vanuit InterSystems IRIS te bouwen, voert u het volgende uit: `docker build --build-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 --force-rm --tag intersystemscommunity/irispy:latest ".

Hierna kunt u de docker-image uitvoeren:

docker run -d 
  -p 52773:52773 
  -v /<HOST-DIR-WITH-iris.key>/:/mount 
  --name irispy 
  intersystemscommunity/irispy:latest 
  --key /mount/iris.key

Als u een image gebruikt die is gebaseerd op InterSystems IRIS Community Edition, kunt u de sleutel weglaten.

Reacties

  • Testproces isc.py.test.Process slaat een aantal afbeeldingen op in een tijdelijke map. Mogelijk wilt u dit pad wijzigen naar de gekoppelde map. Om dit te doen, bewerkt u de instelling WorkingDir waarbij de gekoppelde map wordt opgegeven.
  • Om toegang te krijgen tot de terminalrun: docker exec -it irispy sh.
  • Toegang tot het Systeembeheerportaal door in te loggen SuperUser/SYS.
  • Voer het volgende uit om de container te stoppen: docker stop irispy && docker rm --force irispy.

Het verifiëren van de installatie

Nadat je Python Gateway hebt geïnstalleerd, is het de moeite waard om te controleren of het werkt. Voer deze code uit in de InterSystems IRIS-terminal:

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

Het resultaat zou moeten zijn: HELLO — Python-variabelewaarde x. Als de retourstatus sc is een fout of var leeg, controleer Leesmij - Sectie Problemen oplossen.

API

Python Gateway is geïnstalleerd en je hebt geverifieerd dat het werkt. Het is tijd om het te gaan gebruiken!
De belangrijkste interface voor Python is isc.py.Main. Het biedt de volgende groepen methoden (allemaal return %Status):

  • Code-uitvoering
  • Gegevensoverdracht
  • Extra

Code-uitvoering

Met deze methoden kunt u willekeurige Python-code uitvoeren.

EenvoudigeString

SimpleString - dit is de belangrijkste methode. Er zijn 4 optionele argumenten nodig:

  • code - regel code die moet worden uitgevoerd. Regelfeed-teken: $c(10).
  • returnVariable — naam van de variabele die moet worden geretourneerd.
  • serialization - hoe te serialiseren returnVariable. 0 — tekenreeks (standaard), 1 — repr.
  • result — ByRef-verwijzing naar de variabele waarin de waarde wordt geschreven returnVariable.

Hierboven deden we:

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

In dit voorbeeld wijzen we toe aan een Python-variabele x betekenis Hello en wil de waarde van een Python-variabele retourneren x naar een ObjectScript-variabele var.

ExecuteCode

ExecuteCode is een veiliger en minder beperkend alternatief SimpleString.
Regels in het InterSystems IRIS-platform zijn beperkt tot 3 tekens, en als u een langer stuk code wilt uitvoeren, moet u threads gebruiken.
Er worden twee argumenten aanvaard:

  • code — een regel of stroom Python-code die moet worden uitgevoerd.
  • variable — (optioneel) wijst het resultaat van de uitvoering toe code deze Python-variabele.

Voorbeeld om te gebruiken:

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

In dit voorbeeld vermenigvuldigen we 2 met 3 en schrijven we het resultaat naar een Python-variabele y.

Gegevensoverdracht

Gegevens doorgeven van en naar Python.

Python -> InterSystems IRIS

Er zijn 4 manieren om de waarde van een Python-variabele in InterSystems IRIS te verkrijgen, afhankelijk van de serialisatie die u nodig heeft:

  • String voor eenvoudige gegevenstypen en foutopsporing.
  • Repr voor het opslaan van eenvoudige objecten en het debuggen.
  • JSON voor eenvoudige gegevensmanipulatie aan de InterSystems IRIS-zijde.
  • Pickle objecten op te slaan.

Met deze methoden kunt u variabelen uit Python ophalen als een tekenreeks of als streams.

  • GetVariable(variable, serialization, .stream, useString) - krijgen serialization variabel variable в stream. als useString is 1 en de serialisatie wordt op een string geplaatst, waarna een string wordt geretourneerd en geen stream.
  • GetVariableJson(variable, .stream, useString) — verkrijg JSON-serialisatie van een variabele.
  • GetVariablePickle(variable, .stream, useString, useDill) -krijg Pickle (of Dill) serialisatie van een variabele.

Laten we proberen onze variabele te achterhalen y.

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

InterSystems IRIS -> Python

Gegevens van InterSystems IRIS in Python laden.

  • ExecuteQuery(query, variable, type, namespace) - creëert een dataset (pandas dataframe of list) uit de SQL-query en stelt deze in op een Python-variabele variable. Plastieken zak isc.py moet in de omgeving aanwezig zijn namespace — het verzoek wordt daar uitgevoerd.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) - laadt globale gegevens global van subscript start naar end in Python als een typevariabele type: listof panda's dataframe. Beschrijving van optionele argumenten mask en labels beschikbaar in klassedocumentatie en repository Documenten voor gegevensoverdracht.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) - laadt klassegegevens class van idd start naar end in Python als een typevariabele type: listof panda's dataframe. properties — een lijst (gescheiden door komma's) van klasse-eigenschappen die in de dataset moeten worden geladen. Maskers ondersteund * и ?. Standaard - * (alle eigendommen). Eigendom %%CLASSNAME buiten beschouwing gelaten.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) - laadt tabelgegevens table van idd start naar end in Python.

ExecuteQuery — universeel (elke correcte SQL-query wordt doorgegeven aan Python). Echter, ExecuteGlobal en zijn wikkels ExecuteClass и ExecuteTable werken met een aantal beperkingen. Ze zijn veel sneller (3-5 keer sneller dan de ODBC-driver en 20 keer sneller ExecuteQuery). Meer informatie op Documenten voor gegevensoverdracht.
Al deze methoden ondersteunen gegevensoverdracht vanuit elk gebied. Plastieken zak isc.py moet beschikbaar zijn in het doelgebied.

ExecuteQuery

ExecuteQuery(request, variable, type, namespace) — het overbrengen van de resultaten van elke correcte SQL-query naar Python. Dit is de langzaamste methode voor gegevensoverdracht. Gebruik het als ExecuteGlobal en de wikkels ervan zijn niet beschikbaar.

Argumenten:

  • query - SQL-query.
  • variable — de naam van de Python-variabele waarin de gegevens worden geschreven.
  • type - list of Panda's dataframe.
  • namespace — het gebied waarin het verzoek zal worden uitgevoerd.

Voer Globaal uit

ExecuteGlobal(global, variable, type, start, end, mask, labelels, namespace) - een global doorgeven in Python.

Argumenten:

  • global - globale naam zonder ^
  • variable — de naam van de Python-variabele waarin de gegevens worden geschreven.
  • type - list of Panda's dataframe.
  • start – het eerste subscript van de globale. Nodig %Integer.
  • end – het laatste subscript van de globale. Nodig %Integer.
  • mask — mondiaal waardemasker. Het masker kan korter zijn dan het aantal velden in het globale veld (in dat geval worden de velden aan het einde overgeslagen). Een masker opmaken:
    • + geef de waarde door zoals deze is.
    • - waarde overslaan.
    • b — Booleaans type (0 - False, de rest - True).
    • d — Datum (van $horolog, op Windows vanaf 1970, op Linux vanaf 1900).
    • t — Tijd ($horolog, seconden na middernacht).
    • m — Tijdstempel (notatiereeks JAAR-MAAND-DAG UUR:MINUTE:SECOND).
  • labels — %Lijst met kolomnamen. Het eerste element is de naam van het subscript.
  • namespace — het gebied waarin het verzoek zal worden uitgevoerd.

ExecuteKlasse

Wikkel om ExecuteGlobal. Bereidt een gesprek voor op basis van de klassendefinitie ExecuteGlobal en belt hem.

ExecuteClass(class, variable, type, start, end, properties, namespace) - klassegegevens doorgeven in Python.

Argumenten:

  • class - naam van de klasse
  • variable — de naam van de Python-variabele waarin de gegevens worden geschreven.
  • type - list of Panda's dataframe.
  • start - start-ID.
  • end — uiteindelijke ID
  • properties — een lijst (gescheiden door komma's) van klasse-eigenschappen die in de dataset moeten worden geladen. Maskers ondersteund * и ?. Standaard - * (alle eigendommen). Eigendom %%CLASSNAME buiten beschouwing gelaten.
  • namespace — het gebied waarin het verzoek zal worden uitgevoerd.

Alle eigenschappen worden doorgegeven zoals ze zijn, behalve type-eigenschappen %Date, %Time, %Boolean и %TimeStamp - ze worden omgezet in de overeenkomstige Python-klassen.

Tabel uitvoeren

Wikkel om ExecuteClass. Vertaalt de tabelnaam naar de klassenaam en roept aan ExecuteClass. Handtekening:

ExecuteTable(table, variable, type, start, end, properties, namespace) - tabelgegevens doorgeven aan Python.

Argumenten:

  • table - tafel naam.
    Alle andere argumenten worden doorgegeven zoals ze zijn ExecuteClass.

Opmerkingen

  • ExecuteGlobal, ExecuteClass и ExecuteTable werk even snel.
  • ExecuteGlobal 20 keer sneller dan ExecuteQuery op grote datasets (overdrachtstijd >0.01 seconden).
  • ExecuteGlobal, ExecuteClass и ExecuteTable werk aan globals met deze structuur: ^global(key) = $lb(prop1, prop2, ..., propN) waar key - een geheel getal.
  • Voor ExecuteGlobal, ExecuteClass и ExecuteTable ondersteund bereik van waarden %Date komt overeen met bereik mktime en is afhankelijk van het besturingssysteem (ruiten: 1970-01-01, linux 1900-01-01, Mac). Gebruik %TimeStampom gegevens buiten dit bereik over te dragen of pandas-dataframe te gebruiken omdat dit is een beperking voor alleen een lijst.
  • Voor ExecuteGlobal, ExecuteClass и ExecuteTable alle argumenten behalve de gegevensbron (globaal, klasse of tabel) en variabele zijn optioneel.

Примеры

Test klasse isc.py.test.Person bevat een methode die alle opties voor gegevensoverdracht demonstreert:

set global = "isc.py.test.PersonD"
set class = "isc.py.test.Person"
set table = "isc_py_test.Person"
set query = "SELECT * FROM isc_py_test.Person"

// Общие аргументы
set variable = "df"
set type = "dataframe"
set start = 1
set end = $g(^isc.py.test.PersonD, start)

// Способ 0: ExecuteGlobal без аргументов
set sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 0, type)

// Способ 1: ExecuteGlobal с аргументами    
// При передаче глобала названия полей задаются вручную
// globalKey - название сабсткрипта 
set labels = $lb("globalKey", "Name", "DOB", "TS", "RandomTime", "AgeYears", "AgeDecimal", "AgeDouble", "Bool")

// mask содержит на 1 элемент меньше чем labels потому что "globalKey" - название сабскипта
// Пропускаем %%CLASSNAME
set mask = "-+dmt+++b"

set sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 1, type, start, end, mask, labels)

// Способ 2: ExecuteClass
set sc = ##class(isc.py.Main).ExecuteClass(class, variable _ 2, type, start, end)

// Способ 3: ExecuteTable
set sc = ##class(isc.py.Main).ExecuteTable(table, variable _ 3, type, start, end)

// Способ 4: ExecuteTable
set sc = ##class(isc.py.Main).ExecuteQuery(query, variable _ 4, type)

Roep de methode aan do ##class(isc.py.test.Person).Test() om te zien hoe alle methoden voor gegevensoverdracht werken.

Hulpmethoden

  • GetVariableInfo(variable, serialization, .defined, .type, .length) — informatie krijgen over de variabele: of deze is gedefinieerd, de klasse en de serialisatielengte.
  • GetVariableDefined(variable, .defined) — of de variabele is gedefinieerd.
  • GetVariableType(variable, .type) — verkrijg de klasse van de variabele.
  • GetStatus() - haal en verwijder de laatste uitzondering aan de Python-kant.
  • GetModuleInfo(module, .imported, .alias) — modulevariabele en importstatus ophalen.
  • GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments) — informatie krijgen over de functie.

Interoperabiliteit

Je hebt geleerd hoe je Python Gateway vanaf de terminal kunt aanroepen, laten we het nu in productie gaan gebruiken. De basis voor interactie met Python in deze modus is isc.py.ens.Operation. Het stelt ons in staat:

  • Voer code uit in Python
  • Python-context opslaan/herstellen
  • Gegevens laden en ontvangen van Python

Kortom, een Python-bewerking is een wrapper-over isc.py.Main. Operatie isc.py.ens.Operation biedt de mogelijkheid om te communiceren met het Python-proces van InterSystems IRIS-producten. Er worden vijf query's ondersteund:

  • isc.py.msg.ExecutionRequest om Python-code uit te voeren. Geeft terug isc.py.msg.ExecutionResponse met het uitvoeringsresultaat en de waarden van de gevraagde variabelen.
  • isc.py.msg.StreamExecutionRequest om Python-code uit te voeren. Geeft terug isc.py.msg.StreamExecutionResponse het resultaat van de uitvoering en de waarden van de gevraagde variabelen. Analoog isc.py.msg.ExecutionRequest, maar accepteert en retourneert streams in plaats van strings.
  • isc.py.msg.QueryRequest om het resultaat van het uitvoeren van een SQL-query te verzenden. Geeft terug Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest voor het doorgeven van globale/klasse/tabelgegevens. Geeft terug Ens.Response.
  • isc.py.msg.SaveRequest om Python-context op te slaan. Geeft terug Ens.StringResponse met context-ID.
  • isc.py.msg.RestoreRequest om de Python-context te herstellen.

    Bovendien isc.py.ens.Operation heeft twee instellingen:

    • Initializer — het selecteren van een klasse die de interface implementeert isc.py.init.Abstract. Het kan worden gebruikt om functies, modules, klassen, enz. te laden. Het wordt één keer uitgevoerd wanneer het proces start.
    • PythonLib - (Alleen Linux) Als u fouten ziet tijdens het laden, stelt u de waarde in op libpython3.6m.so of zelfs in het volledige pad naar de Python-bibliotheek.

Creëren van bedrijfsprocessen

Er zijn twee klassen beschikbaar die de ontwikkeling van bedrijfsprocessen vergemakkelijken:

  • isc.py.ens.ProcessUtils Hiermee kunt u annotaties extraheren uit activiteiten met variabele vervanging.
  • isc.py.util.BPEmulator maakt het eenvoudig om bedrijfsprocessen te testen met Python. Het kan een bedrijfsproces (Python-onderdelen) uitvoeren in het huidige proces.

Variabele vervanging

Alle bedrijfsprocessen die zijn geërfd van isc.py.ens.ProcessUtils, kan de methode gebruiken GetAnnotation(name) om de annotatiewaarde van de activiteit op naam te krijgen. De activiteitannotatie kan variabelen bevatten die aan de InterSystems IRIS-zijde worden berekend voordat ze worden doorgegeven aan Python. Hier is de syntaxis voor vervanging van variabelen:

  • ${class:method:arg1:...:argN} - methodeaanroep
  • #{expr} - code uitvoeren in ObjectScript-taal.

Een voorbeeld is beschikbaar in het testbedrijfsproces isc.py.test.Processbijvoorbeeld in activiteit Correlation Matrix: Graph: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). In dit voorbeeld:

  • #{process.WorkDirectory} retourneert de eigenschap WorkDirectory van het object process, wat een instantie van de klasse is isc.py.test.Process die. huidige bedrijfsproces.
  • ${%PopulateUtils:Integer:1:100} noemt een methode Integer klasse %PopulateUtils, argumenten doorgeven 1 и 100, waarbij een willekeurig geheel getal in het bereik wordt geretourneerd 1...100.

Bedrijfsproces testen

Testproducten en testbedrijfsprocessen zijn standaard beschikbaar als onderdeel van de Python Gateway. Om ze te gebruiken:

  1. Voer in de OS-terminal het volgende uit: pip install pandas matplotlib seaborn.
  2. Voer in de InterSystems IRIS-terminal het volgende uit: do ##class(isc.py.test.CannibalizationData).Import() om testgegevens in te vullen.
  3. Lanceer producten isc.py.test.Production.
  4. Verzoektype verzenden Ens.Request в isc.py.test.Process.

Laten we eens kijken hoe het allemaal samenwerkt. Open isc.py.test.Process in de BPL-editor:

Python Gateway bij InterSystems IRIS

Code-uitvoering

De belangrijkste uitdaging is het uitvoeren van Python-code:

Python Gateway bij InterSystems IRIS

Gebruikte zoekopdracht isc.py.msg.ExecutionRequest, hier zijn de eigenschappen:

  • Code — Python-code.
  • SeparateLines — of de code voor uitvoering in regels moet worden verdeeld. $c(10) (n) wordt gebruikt om tekenreeksen te scheiden. Houd er rekening mee dat het NIET wordt aanbevolen om het hele bericht in één keer te verwerken, deze functie is alleen bedoeld om te verwerken def en soortgelijke meerregelige expressies. Standaard 0.
  • Variables — een door komma's gescheiden lijst met variabelen die aan het antwoord worden toegevoegd.
  • Serialization — Hoe we de variabelen die we willen retourneren kunnen serialiseren. Opties: Str, Repr, JSON, Pickle и Dill, standaard Str.

In ons geval stellen we alleen de eigenschap in Code, dus alle andere eigenschappen gebruiken de standaardwaarden. Wij hebben dit ingesteld door te bellen process.GetAnnotation("Import pandas"), dat tijdens runtime een annotatie retourneert nadat de vervanging van variabelen is uitgevoerd. De code tenslotte import pandas as pd wordt doorgegeven aan Python. GetAnnotation kan handig zijn voor het verkrijgen van meerregelige Python-scripts, maar er zijn geen beperkingen op deze methode om code te verkrijgen. U kunt de eigenschap instellen Code op een manier die u uitkomt.

Variabelen verkrijgen

Nog een interessante uitdaging met behulp van isc.py.msg.ExecutionRequest - Correlation Matrix: Tabular:

Python Gateway bij InterSystems IRIS

Het berekent de correlatiematrix aan de Python-kant en extraheert de variabele corrmat terug naar InterSystems IRIS in JSON-formaat door de aanvraageigenschappen in te stellen:

  • Variables: "corrmat"
  • Serialization: "JSON"

We kunnen de resultaten zien in Visual Trace:

Python Gateway bij InterSystems IRIS

En als we deze waarde in de BP nodig hebben, kunnen we deze als volgt verkrijgen: callresponse.Variables.GetAt("corrmat").

Gegevensoverdracht

Laten we het vervolgens hebben over het overbrengen van gegevens van InterSystems IRIS naar Python; alle verzoeken om gegevensoverdracht implementeren de interface isc.py.msg.DataRequestwat de volgende eigenschappen biedt:

  • Variable — een Python-variabele waarin gegevens worden geschreven.
  • Type — variabel type: dataframe (panda's dataframe) of list.
  • Namespace — het gebied waarvan wij gegevens ontvangen. Plastieken zak isc.py zou op dit gebied beschikbaar moeten zijn. Dit kan een gebied zijn zonder productondersteuning.

Op basis van deze interface worden 4 klassen verzoeken geïmplementeerd:

  • isc.py.msg.QueryRequest - stel de eigenschap in Query om een ​​SQL-query te verzenden.
  • isc.py.msg.ClassRequest - stel de eigenschap in Class om klasgegevens door te geven.
  • isc.py.msg.TableRequest - eigendom instellen Table om tabelgegevens over te dragen.
  • isc.py.msg.GlobalRequest - eigendom instellen Global voor wereldwijde gegevensoverdracht.

Kijk tijdens het testproces naar de activiteit RAWWaar isc.py.msg.QueryRequest in actie getoond.

Python Gateway bij InterSystems IRIS

Python-context opslaan/herstellen

Ten slotte kunnen we de Python-context opslaan in InterSystems IRIS, hiervoor zullen we sturen isc.py.msg.SaveRequest met argumenten:

  • Mask — Alleen variabelen die overeenkomen met het masker worden opgeslagen. Ondersteund * и ?. Voorbeeld: "Data*, Figure?". Standaard *.
  • MaxLength — De maximale lengte van de opgeslagen variabele. Als de serialisatie van een variabele langer duurt, wordt deze genegeerd. Stel in op 0 om variabelen van elke lengte te krijgen. Standaard $$$MaxStringLength.
  • Name — Contextnaam (optioneel).
  • Description — Beschrijving van de context (optioneel).

geeft terug Ens.StringResponse с Id opgeslagen context. Kijk tijdens het testproces naar de activiteit Save Context.

Gerelateerd verzoek isc.py.msg.RestoreRequest laadt context van InterSystems IRIS in Python:

  • ContextId — contextidentificatie.
  • Clear — maak de context leeg voordat u herstelt.

Jupyter Notebook

Jupyter Notebook is een open source webapplicatie waarmee u notitieboekjes met code, visualisaties en tekst kunt maken en publiceren. Met Python Gateway kunt u BPL-processen bekijken en bewerken in de vorm van een Jupyter Notebook. Houd er rekening mee dat momenteel de normale Python 3-uitvoerder wordt gebruikt.

Deze extensie gaat ervan uit dat annotaties Python-code bevatten en gebruikt activiteitsnamen als voorafgaande titels. Het is nu mogelijk om PythonGateway-bedrijfsprocessen te ontwikkelen in Jupyter Notebook. Dit is wat mogelijk is:

  • Creëer nieuwe bedrijfsprocessen
  • Bedrijfsprocessen verwijderen
  • Creëer nieuwe activiteiten
  • Wijzig activiteiten
  • Activiteiten verwijderen

Hier demo video. En een paar schermafbeeldingen:

Procesverkenner

Python Gateway bij InterSystems IRIS

Proces-editor

Python Gateway bij InterSystems IRIS

installatie

  1. U heeft InterSystems IRIS 2019.2+ nodig.
  2. Installeer PythonGateway v0.8+ (alleen vereist isc.py.util.Jupyter, isc.py.util.JupyterCheckpoints и isc.py.ens.ProcessUtils).
  3. Werk de ObjectScript-code uit de repository bij.
  4. uitvoeren do ##class(isc.py.util.Jupyter).Install() en volg de aanwijzingen.

Документация.

Bevindingen

MLToolkit is een set tools met als doel modellen en een transactionele omgeving te combineren, zodat de gebouwde modellen eenvoudig direct in uw bedrijfsprocessen kunnen worden gebruikt. Python Gateway is onderdeel van MLToolkit en biedt integratie met de Python-taal, waardoor u alle machine learning-algoritmen die in Python (de belangrijkste omgeving voor veel datawetenschappers) zijn gemaakt, kunt orkestreren en talloze kant-en-klare bibliotheken kunt gebruiken om snel adaptieve, robotachtige analytische AI ​​/ ML-oplossingen op het InterSystems-platform IRIS.

referenties

MLToolkit

De MLToolkit-gebruikersgroep is een privé GitHub-repository die is gemaakt als onderdeel van de InterSystems GitHub-bedrijfsorganisatie. Het is bedoeld voor externe gebruikers die MLToolkit-componenten, waaronder de Python Gateway, installeren, leren of al gebruiken. De groep heeft een aantal geïmplementeerde cases (met broncode en testgegevens) op het gebied van marketing, productie, geneeskunde en vele andere industrieën. Om lid te worden van de ML Toolkit User Group, stuurt u een korte e-mail naar het volgende adres: [e-mail beveiligd] en vermeld in uw brief de volgende informatie:

  • GitHub-gebruikersnaam
  • Organisatie (je werkt of studeert)
  • Positie (uw feitelijke positie in uw organisatie, 'Student' of 'Onafhankelijk').
  • land

Voor degenen die het artikel hebben gelezen en geïnteresseerd zijn in de mogelijkheden van InterSystems IRIS als platform voor het ontwikkelen of hosten van kunstmatige intelligentie en machine learning-engines, nodigen wij u uit om mogelijke scenario's te bespreken die van belang zijn voor uw onderneming. Wij analyseren graag de behoeften van uw bedrijf en stellen samen een actieplan op; E-mailadres voor contact van ons AI/ML-expertteam – [e-mail beveiligd].

Bron: www.habr.com

Voeg een reactie