Python Gateway w firmie InterSystems IRIS

Ten artykuł dotyczy Python Gateway, projektu społeczności open source dla platformy danych InterSystems IRIS. Projekt ten pozwala na orkiestrację dowolnych algorytmów uczenia maszynowego stworzonych w Pythonie (głównym środowisku dla wielu Data Scientist), wykorzystanie licznych gotowych bibliotek do szybkiego tworzenia adaptacyjnych, zrobotyzowanych rozwiązań analitycznych AI/ML na platformie InterSystems IRIS. W tym artykule pokażę, w jaki sposób InterSystems IRIS może koordynować procesy Pythona, przeprowadzać wydajną komunikację dwukierunkową i tworzyć inteligentne procesy biznesowe.

plan

  1. Wstęp.
  2. Narzędzia.
  3. Instalacja.
  4. API.
  5. Interoperacyjność.
  6. Notatnik Jupytera.
  7. Wnioski.
  8. Spinki do mankietów.
  9. M.L.Toolkit.

Wprowadzenie

Python to język programowania wysokiego poziomu ogólnego przeznaczenia, którego celem jest poprawa produktywności programistów i czytelność kodu. W tej serii artykułów opowiem o możliwościach wykorzystania języka Python na platformie InterSystems IRIS, natomiast głównym tematem tego artykułu jest wykorzystanie Pythona jako języka do tworzenia i stosowania modeli uczenia maszynowego.

Uczenie maszynowe (ML) to klasa metod sztucznej inteligencji, których cechą charakterystyczną nie jest bezpośrednie rozwiązanie problemu, ale uczenie się w procesie rozwiązywania wielu podobnych problemów.

Algorytmy i modele uczenia maszynowego stają się coraz bardziej powszechne. Powodów jest wiele, ale wszystko sprowadza się do dostępności, prostoty i osiągania praktycznych rezultatów. Czy klastrowanie, a nawet modelowanie sieci neuronowych to nowa technologia?

Oczywiście, że nie, ale w dzisiejszych czasach nie ma potrzeby pisania setek tysięcy linii kodu, aby uruchomić jeden model, a koszty tworzenia i korzystania z modeli są coraz mniejsze.

Narzędzia ewoluują - chociaż nie mamy narzędzi AI/ML w pełni zorientowanych na GUI, widoczny jest również postęp, jaki zaobserwowaliśmy w przypadku wielu innych klas systemów informatycznych, takich jak BI (od pisania kodu po używanie frameworków i konfigurowalnych rozwiązań zorientowanych na GUI) w narzędziach do tworzenia AI/ML. Etap pisania kodu mamy już za sobą i dziś używamy frameworków do budowania i uczenia modeli.

Inne ulepszenia, takie jak możliwość propagowania wstępnie wytrenowanego modelu, w którym użytkownik końcowy musi po prostu dokończyć trenowanie modelu na swoich określonych danych, również ułatwiają rozpoczęcie stosowania uczenia maszynowego. Te postępy znacznie ułatwiają naukę uczenia maszynowego, zarówno profesjonalistom, jak i firmom jako całości.

Z drugiej strony gromadzimy coraz więcej danych. Dzięki ujednoliconej platformie danych, takiej jak InterSystems IRIS, wszystkie te informacje można natychmiast przygotować i wykorzystać jako dane wejściowe do modeli uczenia maszynowego.

Wraz z przejściem do chmury uruchamianie projektów AI/ML jest łatwiejsze niż kiedykolwiek. Możemy konsumować tylko te zasoby, których potrzebujemy. Co więcej, dzięki równoległości oferowanej przez platformy chmurowe, możemy zaoszczędzić stracony czas.

Ale co z wynikami? Tutaj sprawy się komplikują. Istnieje wiele narzędzi do budowania modeli, które omówię dalej. Zbudowanie dobrego modelu nie jest łatwe, ale co dalej? Nietrywialnym zadaniem jest również czerpanie korzyści z wykorzystania modelu przez biznes. Źródłem problemu jest oddzielenie obciążeń analitycznych i transakcyjnych oraz modeli danych. Kiedy trenujemy model, zwykle robimy to na danych historycznych. Ale miejsce dla skonstruowanego modelu jest w transakcyjnym przetwarzaniu danych. Jaki jest pożytek z najlepszego modelu wykrywania nieuczciwych transakcji, jeśli uruchamiamy go raz dziennie? Oszuści już dawno wyszli z pieniędzmi. Musimy wyszkolić model na danych historycznych, ale musimy również zastosować go w czasie rzeczywistym na nowych przychodzących danych, aby nasze procesy biznesowe mogły działać zgodnie z przewidywaniami modelu.

ML Toolkit to zestaw narzędzi, który właśnie to robi: łączy modele i środowisko transakcyjne, dzięki czemu modele, które budujesz, można łatwo wykorzystać bezpośrednio w procesach biznesowych. Python Gateway jest częścią ML Toolkit i zapewnia integrację z językiem Python (podobnie jak R Gateway, będąc częścią ML Toolkit zapewnia integrację z językiem R).

Narzędzia

Zanim przejdziemy dalej, chciałbym opisać kilka narzędzi i bibliotek Pythona, z których będziemy korzystać później.

Technologia

  • Python to interpretowany język programowania wysokiego poziomu ogólnego przeznaczenia. Główną zaletą języka jest duża biblioteka bibliotek matematycznych, ML i AI. Podobnie jak ObjectScript, jest to język zorientowany obiektowo, ale wszystko jest definiowane dynamicznie, a nie statycznie. Także wszystko jest przedmiotem. Późniejsze artykuły zakładają przelotną znajomość języka. Jeśli chcesz zacząć się uczyć, polecam zacząć od dokumentacja.
  • Do naszych następnych ćwiczeń zestaw Python 3.6.7 64-bitowy.
  • IDE: Używam PyCharm, ale generalnie много. Jeśli używasz Atelier, dostępna jest wtyczka Eclipse dla programistów Pythona. Jeśli używasz VS Code, istnieje rozszerzenie dla Pythona.
  • Notatnik: zamiast IDE możesz pisać i udostępniać swoje skrypty w notatnikach online. Najpopularniejszym z nich jest jupiter.

biblioteki

Oto (częściowa) lista bibliotek uczenia maszynowego:

  • Odrętwiały — podstawowy pakiet do dokładnych obliczeń.
  • Pandy — wydajne struktury danych i narzędzia do analizy danych.
  • Biblioteki Matplotu - Tworzenie wykresów.
  • Dno morskie - wizualizacja danych w oparciu o matplotlib.
  • Wyczyść — metody uczenia maszynowego.
  • XGBoost — algorytmy uczenia maszynowego w ramach metodologii Gradient Boosting.
  • Gensim — NLP.
  • Keras - sieci neuronowe.
  • Tensorflow to platforma do tworzenia modeli uczenia maszynowego.
  • PyTorch to platforma do tworzenia modeli uczenia maszynowego skupiona na Pythonie.
  • Wąż - PMML z różnych modeli.

Technologie AI/ML sprawiają, że biznes jest bardziej wydajny i elastyczny. Co więcej, obecnie technologie te stają się coraz łatwiejsze do opracowania i wdrożenia. Zacznij poznawać technologie AI/ML i dowiedz się, jak mogą one pomóc Twojej organizacji w rozwoju.

Instalacja

Istnieje kilka sposobów instalacji i używania Python Gateway:

  • ОС
    • Windows
    • Linux
    • Mac
  • Doker
    • Użyj obrazu z DockerHub
    • Stwórz swój własny wizerunek

Niezależnie od metody instalacji będziesz potrzebować kodu źródłowego. Jedynym miejscem do pobrania kodu jest strona wydań. Zawiera przetestowane stabilne wersje, po prostu pobierz najnowszą. W tej chwili jest to 0.8, ale z czasem pojawią się nowe. Nie klonuj/pobieraj repozytorium, pobierz najnowszą wersję.

ОС

Jeśli instalujesz Python Gateway w systemie operacyjnym, najpierw (niezależnie od systemu operacyjnego) musisz zainstalować Pythona. Dla tego:

  1. Zainstaluj Pythona 3.6.7 64-bitowego. Zaleca się zainstalowanie Pythona w domyślnym katalogu.
  2. Zainstaluj moduł dill: pip install dill.
  3. Pobierz kod ObjectScript (tj. do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) do dowolnego obszaru z produktami. Jeśli chcesz, aby istniejący obszar obsługiwał produkty, uruchom: write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. Miejsce wywołanie DLL/SO/DYLIB do folderu bin Twojej instancji InterSystems IRIS. Plik biblioteki musi być dostępny w ścieżce zwróconej przez write ##class(isc.py.Callout).GetLib().

Windows

  1. Upewnij się, że zmienna środowiskowa to PYTHONHOME wskazuje na Pythona 3.6.7.
  2. Upewnij się, że zmienna środowiskowa systemu to PATH zawiera zmienną PYTHONHOME (lub katalogu, na który wskazuje).

Linux (Debian/Ubuntu)

  1. Sprawdź, czy zmienna środowiskowa jest PATH zawiera /usr/lib и /usr/lib/x86_64-linux-gnu. Użyj pliku /etc/environment ustawić zmienne środowiskowe.
  2. W przypadku błędów undefined symbol: _Py_TrueStruct ustaw ustawienie PythonLib. także w Readme znajduje się sekcja Rozwiązywanie problemów.

Mac

  1. Obecnie obsługiwany jest tylko python 3.6.7 python.org. Sprawdź zmienną PATH.

Jeśli zmieniłeś zmienne środowiskowe, zrestartuj produkt InterSystems.

Doker

Korzystanie z kontenerów ma szereg zalet:

  • Ruchliwość
  • Skuteczność
  • Izolacja
  • Lekkość
  • Niezmienność

Sprawdź to seria artykułów aby uzyskać więcej informacji na temat używania platformy Docker z produktami InterSystems.

Wszystkie kompilacje Python Gateway są obecnie oparte na kontenerach. 2019.4.

Gotowy obraz

Uruchomić: docker run -d -p 52773:52773 --name irispy intersystemscommunity/irispy-community:latestaby pobrać i uruchomić Python Gateway z InterSystems IRIS Community Edition. To wszystko.

Stwórz swój własny wizerunek

Aby zbudować obraz dokera, uruchom w katalogu głównym repozytorium: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
Domyślnie obraz jest tworzony na podstawie obrazu store/intersystems/iris-community:2019.4.0.383.0, jednak możesz to zmienić, ustawiając zmienną IMAGE.
Aby skompilować z InterSystems IRIS, uruchom: `docker build --build-arg IMAGE=store/intersystems/iris:2019.4.0.383.0 --force-rm --tag intersystemscommunity/irispy:latest'.

Następnie możesz uruchomić obraz dokera:

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

Jeśli używasz obrazu opartego na InterSystems IRIS Community Edition, możesz pominąć klucz.

Komentarze

  • Proces testowy isc.py.test.Process zapisuje kilka obrazów w katalogu tymczasowym. Możesz zmienić tę ścieżkę na zamontowany katalog. W tym celu edytuj ustawienie WorkingDir określając zamontowany katalog.
  • Aby uzyskać dostęp do terminala, uruchom: docker exec -it irispy sh.
  • Dostęp do portalu zarządzania systemem po zalogowaniu SuperUser/SYS.
  • Aby zatrzymać kontener, uruchom: docker stop irispy && docker rm --force irispy.

Sprawdzenie instalacji

Po zainstalowaniu Python Gateway warto sprawdzić, czy działa. Uruchom ten kod w terminalu InterSystems IRIS:

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

Wynik powinien być HELLO - wartość zmiennej Pythona x. Jeśli status zwrotu sc jest błędem lub var pusty, sprawdź Readme — sekcja Rozwiązywanie problemów.

API

Python Gateway jest zainstalowany i zweryfikowałeś, że działa. Czas zacząć go używać!
Głównym interfejsem Pythona jest isc.py.Main. Oferuje następujące grupy metod (wszystkie zwracają %Status):

  • Wykonanie kodu
  • Transfer danych
  • Pomocniczy

Wykonanie kodu

Te metody pozwalają na wykonanie dowolnego kodu Pythona.

Prosty ciąg

SimpleString jest główną metodą. Wymaga 4 opcjonalnych argumentów:

  • code to linia kodu do wykonania. Znak wysuwu wiersza: $c(10).
  • returnVariable jest nazwą zmiennej do zwrócenia.
  • serialization - jak serializować returnVariable. 0 - ciąg znaków (domyślnie), 1 - repr.
  • result - ByRef odniesienie do zmiennej, w której zapisana jest wartość returnVariable.

Powyżej wykonaliśmy:

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

W tym przykładzie przypisujemy do zmiennej Pythona x значение Hello i chcesz zwrócić wartość zmiennej Pythona x do zmiennej ObjectScript var.

Wykonaj kod

ExecuteCode to bezpieczniejsza i mniej restrykcyjna alternatywa SimpleString.
Linie w platformie InterSystems IRIS są ograniczone do 3 641 144 znaków, a jeśli chcesz wykonać dłuższy fragment kodu, musisz użyć strumieni.
Przyjmuje dwa argumenty:

  • code — ciąg znaków lub strumień kodu Pythona do wykonania.
  • variable - (opcjonalnie) przypisuje wynik wykonania code ta zmienna Pythona.

Zaproponuj użycie:

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

W tym przykładzie mnożymy 2 przez 3 i zapisujemy wynik w zmiennej Pythona y.

Transfer danych

Przekazuj dane do i z Pythona.

Python -> InterSystems IRIS

Istnieją 4 sposoby uzyskania wartości zmiennej Pythona w InterSystems IRIS, w zależności od potrzebnej serializacji:

  • String dla prostych typów danych i debugowania.
  • Repr do przechowywania prostych obiektów i debugowania.
  • JSON do łatwej manipulacji danymi po stronie InterSystems IRIS.
  • Pickle do ratowania obiektów.

Te metody pozwalają odbierać zmienne z Pythona jako ciąg znaków lub jako strumienie.

  • GetVariable(variable, serialization, .stream, useString) - Dostawać serialization zmienny variable в stream. Jeśli useString wynosi 1, a serializacja jest umieszczana w łańcuchu, zwracany jest ciąg, a nie strumień.
  • GetVariableJson(variable, .stream, useString) — uzyskaj serializację JSON zmiennej.
  • GetVariablePickle(variable, .stream, useString, useDill) - Uzyskaj serializację zmiennej Pickle (lub Dill).

Spróbujmy pobrać naszą zmienną y.

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

InterSystems IRIS -> Python

Ładowanie danych z InterSystems IRIS do Pythona.

  • ExecuteQuery(query, variable, type, namespace) - tworzy zestaw danych (pandas dataframe lub list) z zapytania sql i ustaw go na zmienną python variable. Plastikowa torba isc.py powinny być dostępne w okolicy namespace - żądanie zostanie tam wykonane.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) - ładuje dane globalne global z indeksu dolnego start do end w Pythonie jako zmienną typu type: listlub pandy dataframe. Opis opcjonalnych argumentów mask i labels dostępne w dokumentacji klasy i repozytorium Dokumenty dotyczące przenoszenia danych.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) - ładuje dane klasy class z identyfikatora start do end w Pythonie jako zmienną typu type: listlub pandy dataframe. properties — lista (oddzielona przecinkami) właściwości klasy, które mają zostać załadowane do zbioru danych. Obsługiwane maski * и ?. Domyślny - * (wszystkie właściwości). Nieruchomość %%CLASSNAME jest ignorowany.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) - ładuje dane tabeli table z identyfikatora start do end w Pythonie.

ExecuteQuery - uniwersalne (każde poprawne zapytanie SQL zostanie przekazane do Pythona). Jednakże, ExecuteGlobal i jego okłady ExecuteClass и ExecuteTable pracować z wieloma ograniczeniami. Są znacznie szybsze (3-5 razy szybsze niż sterownik ODBC i 20 razy szybsze niż ExecuteQuery). Więcej informacji w Dokumenty dotyczące przenoszenia danych.
Wszystkie te metody wspierają transfer danych z dowolnego obszaru. Plastikowa torba isc.py muszą być dostępne na obszarze docelowym.

WykonajZapytanie

ExecuteQuery(request, variable, type, namespace) - przekazywanie wyników dowolnego poprawnego zapytania SQL do Pythona. Jest to najwolniejsza metoda przesyłania danych. Użyj go, jeśli ExecuteGlobal a jego opakowania nie są dostępne.

Argumenty:

  • query - zapytanie sql.
  • variable - nazwa zmiennej Pythona, w której zapisane są dane.
  • type - list lub pandy dataframe.
  • namespace - obszar, w którym żądanie będzie realizowane.

Wykonaj globalnie

ExecuteGlobal(global, variable, type, start, end, mask, labelels, namespace) - przekazanie global do Pythona.

Argumenty:

  • global to nazwa globalnego bez ^
  • variable - nazwa zmiennej Pythona, w której zapisane są dane.
  • type - list lub pandy dataframe.
  • start — pierwszy indeks dolny global. Koniecznie %Integer.
  • end jest ostatnim indeksem dolnym global. Koniecznie %Integer.
  • mask — maska ​​wartości globalnych. Maska może być krótsza niż liczba pól w globalnym (w takim przypadku pola na końcu zostaną pominięte). Jak sformatować maskę:
    • + przekazać wartość bez zmian.
    • - pomiń wartość.
    • b — typ boolowski (0 - False, cała reszta - True).
    • d — Data (z $horolog, w systemie Windows od 1970 r., w systemie Linux od 1900 r.).
    • t - Czas ($horolog, sekundy po północy).
    • m — Znacznik czasu (ciąg formatu ROK-MIESIĄC-DZIEŃ GODZINA:MINUTA:SEKUNDA).
  • labels - %Lista nazw kolumn. Pierwszym elementem jest nazwa indeksu dolnego.
  • namespace - obszar, w którym żądanie będzie realizowane.

Wykonaj klasę

zawijać ExecuteGlobal. Przygotowuje wywołanie na podstawie definicji klasy ExecuteGlobal i dzwoni do niego.

ExecuteClass(class, variable, type, start, end, properties, namespace) - przekazywanie danych klasy do Pythona.

Argumenty:

  • class - Nazwa klasy
  • variable - nazwa zmiennej Pythona, w której zapisane są dane.
  • type - list lub pandy dataframe.
  • start — identyfikator startowy.
  • end - ostateczny identyfikator
  • properties — lista (oddzielona przecinkami) właściwości klasy, które mają zostać załadowane do zbioru danych. Obsługiwane maski * и ?. Domyślny - * (wszystkie właściwości). Nieruchomość %%CLASSNAME jest ignorowany.
  • namespace - obszar, w którym żądanie będzie realizowane.

Wszystkie właściwości są przekazywane bez zmian, z wyjątkiem właściwości typu %Date, %Time, %Boolean и %TimeStamp - są konwertowane na odpowiednie klasy Pythona.

WykonajTabelę

zawijać ExecuteClass. Tłumaczy nazwę tabeli na nazwę klasy i wywołania ExecuteClass. Podpis:

ExecuteTable(table, variable, type, start, end, properties, namespace) - przekazywanie danych z tabeli do Pythona.

Argumenty:

  • table - Nazwa tabeli.
    Wszystkie inne argumenty są przekazywane bez zmian. ExecuteClass.

Uwagi

  • ExecuteGlobal, ExecuteClass и ExecuteTable działać równie szybko.
  • ExecuteGlobal 20 razy szybciej niż ExecuteQuery na dużych zbiorach danych (czas przesyłania >0.01 sekundy).
  • ExecuteGlobal, ExecuteClass и ExecuteTable pracuj nad globalami o tej strukturze: ^global(key) = $lb(prop1, prop2, ..., propN) gdzie key jest liczbą całkowitą.
  • dla ExecuteGlobal, ExecuteClass и ExecuteTable obsługiwany zakres wartości %Date odpowiada zakresowi mktime i zależy od systemu operacyjnegookna: 1970-01-01, linux 1900-01-01, mac). Używać %TimeStampaby przekazać dane poza ten zakres lub użyć ramki danych pandy jako to ograniczenie dotyczy tylko listy.
  • dla ExecuteGlobal, ExecuteClass и ExecuteTable wszystkie argumenty z wyjątkiem źródła danych (globalne, klasa lub tabela) i zmiennej są opcjonalne.

Примеры

klasa testowa isc.py.test.Osoba zawiera metodę demonstrującą wszystkie opcje przesyłania danych:

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)

metoda wywołania do ##class(isc.py.test.Person).Test() aby zobaczyć, jak działają wszystkie metody przesyłania danych.

Metody pomocnicze

  • GetVariableInfo(variable, serialization, .defined, .type, .length) - uzyskać informacje o zmiennej: czy jest zdefiniowana, klasa i długość serializacji.
  • GetVariableDefined(variable, .defined) - czy zmienna jest zdefiniowana.
  • GetVariableType(variable, .type) - pobierz klasę zmiennej.
  • GetStatus() - pobierz i usuń ostatni wyjątek po stronie Pythona.
  • GetModuleInfo(module, .imported, .alias) — pobierz zmienną modułu i status importu.
  • GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments) - uzyskać informacje o funkcji.

Interoperacyjność

Nauczyłeś się wywoływać Python Gateway z terminala, teraz zacznijmy używać go w produkcji. Podstawą interakcji z Pythonem w tym trybie jest isc.py.ens.Operation. Pozwala nam:

  • Wykonaj kod Pythona
  • Zapisz/przywróć kontekst Pythona
  • Ładuj i odbieraj dane z Pythona

Zasadniczo operacja w Pythonie jest opakowaniem isc.py.Main. Operacja isc.py.ens.Operation umożliwia interakcję z procesem Python z produktów InterSystems IRIS. Obsługiwanych jest pięć żądań:

  • isc.py.msg.ExecutionRequest wykonać kod Pythona. zwroty isc.py.msg.ExecutionResponse z wynikiem wykonania i wartościami żądanych zmiennych.
  • isc.py.msg.StreamExecutionRequest wykonać kod Pythona. zwroty isc.py.msg.StreamExecutionResponse wynik wykonania i wartości żądanych zmiennych. analog isc.py.msg.ExecutionRequest, ale akceptuje i zwraca strumienie zamiast łańcuchów.
  • isc.py.msg.QueryRequest do przekazania wyniku wykonania zapytania SQL. zwroty Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest przekazać dane globalne/klasowe/tabelowe. zwroty Ens.Response.
  • isc.py.msg.SaveRequest aby zapisać kontekst Pythona. zwroty Ens.StringResponse z identyfikatorem kontekstu.
  • isc.py.msg.RestoreRequest aby przywrócić kontekst Pythona.

    RљSЂRѕRјRμ S, RѕRіRѕ, isc.py.ens.Operation ma dwa ustawienia:

    • Initializer - wybór klasy implementującej interfejs isc.py.init.Abstract. Może być używany do ładowania funkcji, modułów, klas i tym podobnych. Jest wykonywany raz, gdy proces się rozpoczyna.
    • PythonLib - (Tylko Linux) jeśli widzisz błędy rozruchu, ustaw jego wartość na libpython3.6m.so lub nawet w pełnej ścieżce do biblioteki Pythona.

Tworzenie procesów biznesowych

Dostępne są dwie klasy ułatwiające rozwój procesów biznesowych:

  • isc.py.ens.ProcessUtils pozwala na wyodrębnianie adnotacji z czynności z podstawieniem zmiennych.
  • isc.py.util.BPEmulator ułatwia testowanie procesów biznesowych za pomocą Pythona. Może wykonać proces biznesowy (części Pythona) w bieżącym procesie.

Podstawianie zmiennych

Wszystkie procesy biznesowe odziedziczone z isc.py.ens.ProcessUtils, może skorzystać z metody GetAnnotation(name) aby uzyskać wartość adnotacji działania według jej nazwy. Adnotacja działania może zawierać zmienne, które zostaną ocenione po stronie InterSystems IRIS przed przekazaniem do Pythona. Oto składnia zastępowania zmiennych:

  • ${class:method:arg1:...:argN} - wywołanie metody
  • #{expr} - wykonać kod w języku ObjectScript.

Przykład jest dostępny w testowym procesie biznesowym isc.py.test.Processna przykład w aktywności Correlation Matrix: Graph: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). W tym przykładzie:

  • #{process.WorkDirectory} zwraca właściwość WorkDirectory obiektu process, która jest instancją klasy isc.py.test.Process te. bieżący proces biznesowy.
  • ${%PopulateUtils:Integer:1:100} wywołuje metodę Integer klasa %PopulateUtils, przekazując argumenty 1 и 100, zwracając losową liczbę całkowitą z zakresu 1...100.

Przetestuj proces biznesowy

Produkcja testowa i testowy proces biznesowy są domyślnie dostępne jako część Python Gateway. Aby z nich skorzystać:

  1. W terminalu systemu operacyjnego uruchom: pip install pandas matplotlib seaborn.
  2. W terminalu InterSystems IRIS uruchom: do ##class(isc.py.test.CannibalizationData).Import() wypełnić dane testowe.
  3. Uruchom produkty isc.py.test.Production.
  4. Wyślij typ żądania Ens.Request в isc.py.test.Process.

Zobaczmy, jak to wszystko razem działa. otwarty isc.py.test.Process w edytorze BPL:

Python Gateway w firmie InterSystems IRIS

Wykonanie kodu

Najważniejszym wywołaniem jest wykonanie kodu Pythona:

Python Gateway w firmie InterSystems IRIS

Żądanie wykorzystane isc.py.msg.ExecutionRequest, oto jego właściwości:

  • Code — Kod Pythona.
  • SeparateLines - czy podzielić kod na linie do wykonania. $c(10) (n) służy do oddzielania łańcuchów. Pamiętaj, że NIE zaleca się przetwarzania całej wiadomości na raz, ta funkcja służy tylko do przetwarzania def i podobne wyrażenia wielowierszowe. Domyślny 0.
  • Variables to oddzielona przecinkami lista zmiennych, które zostaną dodane do odpowiedzi.
  • Serialization - Jak serializować zmienne, które chcemy zwrócić. Opcje: Str, Repr, JSON, Pickle и Dill, domyślny Str.

W naszym przypadku ustawiamy tylko właściwość Code, tak aby wszystkie inne właściwości używały swoich wartości domyślnych. Ustaliliśmy to dzwoniąc process.GetAnnotation("Import pandas"), która w czasie wykonywania zwraca adnotację po wykonaniu podstawienia zmiennej. Wreszcie kod import pandas as pd zostanie przekazany do Pythona. GetAnnotation może być przydatne do uzyskiwania wielowierszowych skryptów Pythona, ale nie ma ograniczeń co do tego sposobu uzyskiwania kodu. Możesz ustawić właściwość Code w dowolny dogodny dla Ciebie sposób.

Pobieranie zmiennych

Kolejne ciekawe wyzwanie z użyciem isc.py.msg.ExecutionRequest - Correlation Matrix: Tabular:

Python Gateway w firmie InterSystems IRIS

Oblicza macierz korelacji po stronie Pythona i wyodrębnia zmienną corrmat z powrotem do InterSystems IRIS w formacie JSON ustawiając właściwości żądania:

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

Wyniki możemy zobaczyć w Visual Trace:

Python Gateway w firmie InterSystems IRIS

A jeśli potrzebujemy tej wartości w BP, można ją uzyskać w następujący sposób: callresponse.Variables.GetAt("corrmat").

Transfer danych

Następnie porozmawiajmy o przesyłaniu danych z InterSystems IRIS do Pythona, wszystkie żądania przesyłania danych implementują interfejs isc.py.msg.DataRequest, który zapewnia następujące właściwości:

  • Variable jest zmienną Pythona, do której zapisywane są dane.
  • Type - typ zmiennej: dataframe (ramka danych pandy) lub list.
  • Namespace - obszar, z którego otrzymujemy dane. Plastikowa torba isc.py powinny być dostępne w tym obszarze. Może to być obszar bez wsparcia produktu.

W oparciu o ten interfejs realizowane są 4 klasy żądań:

  • isc.py.msg.QueryRequest - ustawić właściwość Query wysłać zapytanie SQL.
  • isc.py.msg.ClassRequest - ustawić właściwość Class przekazać dane klasy.
  • isc.py.msg.TableRequest - ustawić właściwość Table przekazać dane tabeli.
  • isc.py.msg.GlobalRequest - ustawić właściwość Global do globalnego przesyłania danych.

W procesie testowym spójrz na aktywność RAWGdzie isc.py.msg.QueryRequest pokazane w akcji.

Python Gateway w firmie InterSystems IRIS

Zapisywanie/przywracanie kontekstu Pythona

Wreszcie możemy przechowywać kontekst Pythona w InterSystems IRIS, aby to zrobić, wyślij isc.py.msg.SaveRequest z argumentami:

  • Mask — Zapisywane są tylko zmienne, które spełniają wymagania maski. Utrzymany * и ?. Przykład: "Data*, Figure?". Domyślny *.
  • MaxLength — Maksymalna długość przechowywanej zmiennej. Jeśli serializacja zmiennej jest dłuższa, zostanie zignorowana. Ustaw na 0, aby uzyskać zmienne o dowolnej długości. Domyślny $$$MaxStringLength.
  • Name — Nazwa kontekstu (opcjonalnie).
  • Description — Opis kontekstu (nieobowiązkowo).

zwroty Ens.StringResponse с Id zapisany kontekst. W procesie testowym spójrz na aktywność Save Context.

Powiązane żądanie isc.py.msg.RestoreRequest ładuje kontekst z InterSystems IRIS do Pythona:

  • ContextId jest identyfikatorem kontekstu.
  • Clear — wyczyść kontekst przed przywróceniem.

Notebook Jupyter

Notebook Jupyter to aplikacja internetowa typu open source, która umożliwia tworzenie i publikowanie notatników zawierających kod, wizualizacje i tekst. Python Gateway umożliwia przeglądanie i edytowanie procesów BPL jako Jupyter Notebook. Zauważ, że obecnie używany jest zwykły executor Pythona 3.

To rozszerzenie zakłada, że ​​adnotacje zawierają kod Pythona i używają nazw działań jako poprzedzających tytułów. Obecnie możliwe jest tworzenie procesów biznesowych PythonGateway w Jupyter Notebook. Oto, co jest możliwe:

  • Twórz nowe procesy biznesowe
  • Usuń procesy biznesowe
  • Twórz nowe działania
  • Zmień czynności
  • Usuń działania

tutaj jest wideo demonstracyjne. I kilka zrzutów ekranu:

Eksplorator procesów

Python Gateway w firmie InterSystems IRIS

Edytor procesów

Python Gateway w firmie InterSystems IRIS

Instalacja

  1. Będziesz potrzebował InterSystems IRIS 2019.2+.
  2. Zainstaluj PythonGateway v0.8+ (wymaga tylko isc.py.util.Jupyter, isc.py.util.JupyterCheckpoints и isc.py.ens.ProcessUtils).
  3. Zaktualizuj kod ObjectScript z repozytorium.
  4. Wykonać do ##class(isc.py.util.Jupyter).Install() i postępuj zgodnie z instrukcjami.

Dokumentacja.

odkrycia

MLToolkit to zestaw narzędzi, który ma na celu połączenie modeli i środowiska transakcyjnego tak, aby zbudowane modele można było łatwo wykorzystać bezpośrednio w Twoich procesach biznesowych. Python Gateway jest częścią MLToolkit i zapewnia integrację z językiem Python, umożliwiając orkiestrację dowolnych algorytmów uczenia maszynowego stworzonych w Pythonie (głównym środowisku dla wielu Data Scientist), korzystanie z wielu gotowych bibliotek do szybkiego tworzenia adaptacyjnej, zrobotyzowanej analitycznej AI / Rozwiązania ML na platformie InterSystems IRIS.

referencje

MLTookit

Grupa użytkowników MLToolkit to prywatne repozytorium GitHub utworzone w ramach korporacyjnej organizacji GitHub firmy InterSystems. Jest skierowany do użytkowników zewnętrznych, którzy instalują, uczą się lub już używają komponentów MLToolkit, w tym Python Gateway. Grupa ma na swoim koncie szereg wdrożonych przypadków (z kodem źródłowym i danymi testowymi) z dziedzin marketingu, produkcji, medycyny i wielu innych branż. Aby dołączyć do grupy użytkowników ML Toolkit, wyślij krótką wiadomość e-mail na następujący adres: [email chroniony] i umieść w swoim liście następujące informacje:

  • Nazwa użytkownika GitHub
  • Organizacja (pracujesz lub studiujesz)
  • Stanowisko (Twoja rzeczywista pozycja w organizacji, „Student” lub „Niezależny”).
  • kraj

Tych, którzy przeczytali artykuł i są zainteresowani InterSystems IRIS jako platformą do tworzenia lub hostowania mechanizmów sztucznej inteligencji i uczenia maszynowego, zapraszamy do omówienia możliwych scenariuszy interesujących Państwa przedsiębiorstwo. Chętnie przeanalizujemy potrzeby Twojego przedsiębiorstwa i wspólnie ustalimy plan działania; kontaktowy adres e-mail naszej grupy ekspertów AI/ML – [email chroniony].

Źródło: www.habr.com

Dodaj komentarz