Python Gateway w InterSystems IRIS

Ten artykuł poświęcony jest Python Gateway – projektowi społecznościowemu o otwartym kodzie źródłowym dla platformy danych InterSystems IRIS. Projekt ten umożliwia orkiestrację wszelkich algorytmów uczenia maszynowego stworzonych w języku Python (głównej przestrzeni roboczej dla wielu Data Scientistów), wykorzystując liczne gotowe biblioteki do szybkiego tworzenia adaptacyjnych, zrobotyzowanych rozwiązań analitycznych AI/ML na platformie InterSystems IRIS. W tym artykule pokażę, jak InterSystems IRIS może orkiestruje procesy w języku Python, efektywnie realizując dwustronny transfer danych i tworząc inteligentne procesy biznesowe.

Plan

  1. Wprowadzenie.
  2. Narzędzia.
  3. Instalacja.
  4. API.
  5. Interopertywność.
  6. Jupyter Notebook.
  7. Wnioski.
  8. Linki.
  9. MLToolkit.

Wprowadzenie

Python to język programowania wysokiego poziomu ogólnego przeznaczenia, skoncentrowany na zwiększeniu wydajności programisty oraz czytelności kodu. W tej serii artykułów opowiem o możliwościach zastosowania języka Python na platformie InterSystems IRIS, z naciskiem na zastosowanie Pythona jako języka do tworzenia oraz wdrażania modeli uczenia maszynowego.

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

Algorytmy i modele uczenia maszynowego stają się coraz bardziej powszechne. Jest wiele powodów tego stanu, ale wszystko sprowadza się do dostępności, prostoty oraz osiągania praktycznych wyników. Czy klasteryzacja lub nawet modelowanie neuronowe to nowe technologie?

Oczywiście, że nie, ale obecnie nie ma potrzeby pisania setek tysięcy linijek kodu, aby uruchomić jeden model, a koszty tworzenia i wdrażania modeli stają się coraz mniejsze.

Narzędzia ewoluują – chociaż nie mamy jeszcze całkowicie narzędzi AI/ML zorientowanych na GUI, postęp, który zauważyliśmy w wielu innych klasach systemów informacyjnych, na przykład BI (od pisania kodu do użycia frameworków i rozwiązań konfigurowalnych opartych na GUI), jest również dostrzegalny w narzędziach do tworzenia AI/ML. Już przeszliśmy etap pisania kodu i dziś korzystamy z frameworków do budowania i szkolenia modeli.

Inne ulepszenia, takie jak możliwość dystrybucji wstępnie wytrenowanego modelu, w którym końcowy użytkownik musi jedynie dokończyć trening modelu na swoich specyficznych danych, ułatwiają rozpoczęcie stosowania uczenia maszynowego. Te osiągnięcia znacznie upraszczają naukę uczenia maszynowego zarówno dla specjalistów, jak i dla firm jako całości.

Z drugiej strony zbieramy coraz więcej danych. Dzięki zintegrowanej platformie danych, takiej jak InterSystems IRIS, wszystkie te informacje mogą być natychmiast przygotowane i wykorzystane jako dane wyjściowe do modeli uczenia maszynowego.

Przejście na chmurę sprawia, że uruchamianie projektów AI/ML staje się łatwiejsze niż kiedykolwiek. Możemy korzystać tylko z tych zasobów, które są nam potrzebne. Co więcej, dzięki paralelizacji oferowanej przez platformy chmurowe, możemy zaoszczędzić czas.

Ale co z wynikami? Tutaj robi się trudniej. Istnieje wiele narzędzi do budowania modeli, o których opowiem dalej. Zbudowanie dobrego modelu nie jest proste, ale co dalej? Uzyskanie korzyści z wykorzystania modelu przez biznes także jest niełatwym zadaniem. Rdzeń problemu tkwi w rozdzieleniu obciążeń analitycznych i transakcyjnych oraz modeli danych. Gdy szkolimy model, zazwyczaj robimy to na danych historycznych. Ale miejsce dla zbudowanego modelu znajduje się w obróbce transakcyjnej danych. Co dobrego jest w najlepszym modelu wykrywania oszukańczych transakcji, jeśli uruchamiamy go raz dziennie? Oszuści już dawno uciekli z pieniędzmi. Musimy trenować model na danych historycznych, ale musimy go również stosować w czasie rzeczywistym na nowych danych przychodzących, aby nasze procesy biznesowe mogły działać zgodnie z prognozami, które model wygenerował.

ML Toolkit to zestaw narzędzi, którego celem jest właśnie to: połączenie modeli i środowiska transakcyjnego, aby zbudowane modele można było łatwo wykorzystać bezpośrednio w twoich 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 dla Pythona, które będziemy używać później.

Technologie

  • Python to interpretowany, wysokopoziomowy język programowania ogólnego przeznaczenia. Główną zaletą języka jest obszerna biblioteka matematycznych, ML- i AI-bibliotek. Podobnie jak ObjectScript, jest to język obiektowy, ale wszystko definiowane jest dynamicznie, a nie statycznie. Wszystko jest również obiektem. W późniejszych artykułach zakłada się przelotne zapoznanie się z językiem. Jeśli chcesz zacząć naukę, polecam zacząć od dokumentacji.
  • Do naszych następnych ćwiczeń zainstaluj Python 3.6.7 64 bit.
  • IDE: Używam PyCharm, ale ogólnie można użyć też wielu. Jeśli używasz Atelier, istnieje wtyczka Eclipse dla programistów Pythona. Jeśli korzystasz z VS Code, dostępne jest rozszerzenie dla Pythona.
  • Notebook: zamiast IDE możesz pisać i dzielić się swoimi skryptami w internetowych notatnikach. Najpopularniejszy z nich to Jupyter.

Biblioteki

Oto (niepełna) lista bibliotek do uczenia maszynowego:

  • Numpy — podstawowy pakiet do obliczeń numerycznych.
  • Pandas — struktury danych i narzędzia do analizy danych o wysokiej wydajności.
  • Matplotlib — tworzenie wykresów.
  • Seaborn — wizualizacja danych oparta na matplotlib.
  • Sklearn — metody uczenia maszynowego.
  • XGBoost — algorytmy uczenia maszynowego w ramach metodologii gradient boosting.
  • Gensim — NLP.
  • Keras — sieci neuronowe.
  • Tensorflow — platforma do tworzenia modeli uczenia maszynowego.
  • PyTorch — platforma do budowania modeli uczenia maszynowego, skierowana na Pythona.
  • Nyoka — PMML z różnych modeli.

Technologie AI/ML pozwalają uczynić biznes bardziej efektywnym i elastycznym. Co więcej, dzisiaj te technologie stają się prostsze w rozwoju i wdrażaniu. Zacznij naukę technologii AI/ML i sprawdź, jak mogą pomóc Twojej organizacji w rozwoju.

Instalacja

Istnieje kilka sposobów na zainstalowanie i używanie Python Gateway:

  • systemem operacyjnym
    • Windows
    • Linuxa
    • Mac
  • Docker
    • Użyj obrazu z DockerHub
    • Stwórz swój własny obraz

Bez względu na sposób instalacji, będziesz potrzebować kodu źródłowego. Jedynym miejscem do pobrania kodu jest strona wydań. Zawiera ona przetestowane stabilne wydania, po prostu weź ostatnie. Na ten moment to 0.8, ale z czasem będą też nowe. Nie klonuj/nie ściągaj repozytorium, pobierz najnowsze wydanie.

systemem operacyjnym

Jeśli instalujesz Python Gateway w systemie operacyjnym, najpierw (bez względu na system operacyjny) musisz zainstalować Pythona. W tym celu:

  1. Zainstaluj Pythona 3.6.7 w wersji 64 bitowej. Zaleca się zainstalowanie Pythona w katalogu domyślnym.
  2. Zainstaluj moduł dill: pip install dill.
  3. Pobierz kod ObjectScript (tzn. do $system.OBJ.ImportDir("C:InterSystemsReposPythoniscpy", "*.cls", "c",,1)) do dowolnego obszaru z produktami. W przypadku, gdy chcesz, aby istniejący obszar wspierał produkty, wykonaj: write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1).
  4. Umieść callout DLL/SO/DYLIB do folderu bin Twojego instancji InterSystems IRIS. Plik biblioteki powinien być dostępny pod ścieżką, zwracaną przez write ##class(isc.py.Callout).GetLib().

Windows

  1. Upewnij się, że zmienna środowiskowa PYTHONHOME wskazuje na Pythona 3.6.7.
  2. Upewnij się, że zmienna środowiskowa ŚCIEŻKA zawiera zmienną PYTHONHOME (lub katalog, na który wskazuje).

Linux (Debian/Ubuntu)

  1. Sprawdź, czy zmienna środowiskowa ŚCIEŻKA zawiera /usr/lib i /usr/lib/x86_64-linux-gnu. Użyj pliku /etc/environment do ustawienia zmiennych środowiskowych.
  2. W przypadku błędów undefined symbol: _Py_TrueStruct ustaw konfigurację PythonLib. Ponadto w Readme jest sekcja Rozwiązywanie problemów.

Mac

  1. Obecnie wspierana jest tylko wersja Pythona 3.6.7 z Python.org. Sprawdź zmienną ŚCIEŻKA.

Jeśli zmieniałeś zmienne środowiskowe, zrestartuj swój produkt InterSystems.

Docker

Użycie kontenerów ma wiele zalet:

  • Przenośność
  • Efektywność
  • Izolacja
  • Lekkość
  • Niezmienność

Zapoznaj się z tą serią artykułów aby uzyskać więcej informacji na temat korzystania z Dockera z produktami InterSystems.

Wszystkie wersje Python Gateway na ten moment są oparte na kontenerach 2019.4.

Gotowy obraz

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

Stwórz swój własny obraz

Aby zbudować obraz Docker, wykonaj w głównym katalogu repozytorium: docker build --force-rm --tag intersystemscommunity/irispy:latest ..
Domyślnie obraz jest budowany na podstawie obrazu store/intersystems/iris-community:2019.4.0.383.0, jednak możesz to zmienić, ustawiając zmienną IMAGE.
Aby zbudować z InterSystems IRIS, wykonaj: `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 docker:

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

Jeśli używasz obrazu opartego na InterSystems IRIS Community Edition, możesz nie podawać klucza.

Komentarze

  • Proces testowy isc.py.test.Process zachowuje szereg obrazów w katalogu tymczasowym. Możesz chcieć zmienić tę ścieżkę na zamontowany katalog. W tym celu edytuj ustawienie WorkingDir okazując zamontowany katalog.
  • Aby uzyskać dostęp do terminala, wykonaj: docker exec -it irispy sh.
  • Dostęp do Portalu Zarządzania Systemem za pomocą loginu SuperUser/SYS.
  • Aby zatrzymać kontener, wykonaj: docker stop irispy && docker rm --force irispy.

Sprawdzenie instalacji

Po zainstalowaniu Python Gateway warto sprawdzić, czy działa. Wykonaj 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

W wyniku powinno być wyświetlone HELLO — wartość zmiennej Python x. Jeśli zwrócony status sc jest błędem lub var pusty, sprawdź Readme — sekcję Rozwiązywanie problemów.

API

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

  • Wykonanie kodu
  • Przesyłanie danych
  • Pomocnicze

Wykonanie kodu

Te metody pozwalają na wykonanie dowolnego kodu Python.

SimpleString

SimpleString — to główna metoda. Przyjmuje 4 opcjonalne argumenty:

  • code — ciąg kodu do wykonania. Znak końca linii: $c(10).
  • returnVariable — nazwa zmiennej do zwrócenia.
  • serialization — jak serializować. returnVariable. 0 — string (domyślnie), 1 — repr.
  • result — ByRef odniesienie do zmiennej, do której zapisywana jest wartość returnVariable.

Powyżej wykonaliśmy:

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

W tym przykładzie przypisujemy zmiennej Python x wartość Cześć i chcemy zwrócić wartość zmiennej Python x do zmiennej ObjectScript var.

ExecuteCode

ExecuteCode jest bezpieczniejszą i mniej ograniczoną alternatywą SimpleString.
Ciągi w platformie InterSystems IRIS są ograniczone do 3 641 144 znaków, a jeśli chcesz wykonać dłuższy fragment kodu, musisz używać strumieni.
Przyjmuje dwa argumenty:

  • code — ciąg lub strumień kodu Python do wykonania.
  • variable — (opcjonalnie) przypisuje wynik wykonania code tej zmiennej Python.

Przykład użycia:

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

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

Przesyłanie danych

Przekazuj dane do Pythona i z powrotem.

Python -> InterSystems IRIS

Są 4 sposoby na uzyskanie wartości zmiennej Python 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.
  • YANG do łatwej manipulacji danymi po stronie InterSystems IRIS.
  • Pickle do zapisywania obiektów.

Te metody pozwalają uzyskać zmienne z Pythona w postaci ciągu lub strumieni.

  • GetVariable(variable, serialization, .stream, useString) — otrzymać serialization zmiennej variable do stream. Jeśli useString równa 1, a serializacja jest umieszczona w ciągu, to zwracany jest ciąg, a nie strumień.
  • GetVariableJson(variable, .stream, useString) — otrzymać serializację JSON zmiennej.
  • GetVariablePickle(variable, .stream, useString, useDill) - otrzymać serializację Pickle (lub Dill) zmiennej.

Spróbujmy uzyskać naszą zmienną y.

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

InterSystems IRIS -> Python

Ładujemy dane z InterSystems IRIS do Pythona.

  • ExecuteQuery(query, variable, type, namespace) — tworzy zbiór danych (pandas dataframe lub list) z zapytania sql i przypisuje go do zmiennej Pythona variable. Paczka isc.py musi być dostępna w obszarze namespace — tam będzie wykonywane zapytanie.
  • ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) — ładuje dane globalne global z subskryptu start do end do Pythona jako zmienna typu type: list, lub pandas dataframe. Opis opcjonalnych argumentów maskuj i labels dostępny w dokumentacji klasy i repozytorium dokumentacja transferu danych.
  • ExecuteClass(class, variable, type, start, end, properties, namespace) — ładuje dane klasy class z id start do end do Pythona jako zmienna typu type: list, lub pandas dataframe. properties — lista (separator — przecinek) właściwości klasy, które należy załadować do zbioru danych. Obsługiwane są maski * i ?. Domyślnie — * (wszystkie właściwości). Właśćność %%CLASSNAME jest ignorowane.
  • ExecuteTable(table, variable, type, start, end, properties, namespace) — ładuje dane tabeli stół z id start do end do Pythona.

ExecuteQuery — jest uniwersalne (jakiekolwiek poprawne zapytanie SQL zostanie przekazane do Pythona). Jednakże, ExecuteGlobal i jego opakowania ExecuteClass i ExecuteTable działają z pewnymi ograniczeniami. Są znacznie szybsze (3-5 razy szybsze od sterownika ODBC i 20 razy szybsze ExecuteQuery). Dodatkowe informacje w dokumentacja transferu danych.
Wszystkie te metody wspierają transfer danych z dowolnego obszaru. Paczka isc.py musi być dostępna w docelowym obszarze.

ExecuteQuery

ExecuteQuery(request, variable, type, namespace) — przekazywanie wyników dowolnego poprawnego zapytania SQL do Pythona. To najwolniejsza metoda transferu danych. Używaj jej, jeśli ExecuteGlobal i jego opakowania są niedostępne.

Argumenty:

  • query — zapytanie sql.
  • variable — nazwa zmiennej Pythona, do której zapisywane są dane.
  • typelist lub Pandas dataframe.
  • namespace — obszar, w którym będzie wykonywane zapytanie.

ExecuteGlobal

ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace) — przekazywanie globalnej w Pythona.

Argumenty:

  • global — nazwa globalnej bez ^
  • variable — nazwa zmiennej Pythona, do której zapisywane są dane.
  • typelist lub Pandas dataframe.
  • start — pierwszy subskrypt globalny. Obowiązkowy %Integer.
  • end — ostatni subskrypt globalny. Obowiązkowy %Integer.
  • maskuj — maska wartości globalnej. Maska może być krótsza niż liczba pól w globalnej (w takim przypadku pola na końcu zostaną pominięte). Jak sformatować maskę:
    • + przekazać wartość taką, jaka jest.
    • - pominąć wartość.
    • b — Typ logiczny (0Fałsz, wszystko inne — Prawda).
    • d — Data (z $horolog, na Windows od 1970, na Linux od 1900).
    • t — Czas ($horolog, sekundy po północy).
    • m — Znacznik czasu (ciąg w formacie ROK-MIESIĄC-DZIEŃ GODZINA:MINUTA:SEKUNDA).
  • labels — %Lista nazw kolumn. Pierwszy element — nazwa subskryptu.
  • namespace — obszar, w którym będzie wykonywane zapytanie.

ExecuteClass

Owijka nad ExecuteGlobal. Na podstawie definicji klasy przygotowuje wywołanie ExecuteGlobal i wykonuje je.

ExecuteClass(class, variable, type, start, end, properties, namespace) — przekazywanie danych klasy w Pythonie.

Argumenty:

  • class — nazwa klasy
  • variable — nazwa zmiennej Pythona, do której zapisywane są dane.
  • typelist lub Pandas dataframe.
  • start — początkowy Id.
  • end — końcowy Id
  • properties — lista (separator — przecinek) właściwości klasy, które należy załadować do zbioru danych. Obsługiwane są maski * i ?. Domyślnie — * (wszystkie właściwości). Właśćność %%CLASSNAME jest ignorowane.
  • namespace — obszar, w którym będzie wykonywane zapytanie.

Wszystkie właściwości są przekazywane dokładnie tak, jak są, z wyjątkiem właściwości typów %Date, %Czas, %Boolean i %ZnacznikCzasu — są konwertowane na odpowiadające klasy Pythona.

ExecuteTable

Owijka nad ExecuteClass. Przekazuje nazwę tabeli w nazwę klasy i wywołuje ExecuteClass. Podpis:

ExecuteTable(table, variable, type, start, end, properties, namespace) — przekazywanie danych tabeli w Pythonie.

Argumenty:

  • stół — nazwa tabeli.
    Wszystkie pozostałe argumenty są przekazywane dokładnie tak, jak są do ExecuteClass.

Notatki

  • ExecuteGlobal, ExecuteClass i ExecuteTable działają z taką samą szybkością.
  • ExecuteGlobal 20 razy szybciej niż ExecuteQuery na dużych zbiorach danych (czas przesyłu wynosi więcej niż >0.01 sekundy).
  • ExecuteGlobal, ExecuteClass i ExecuteTable działają na globalach o danej strukturze: ^global(key) = $lb(prop1, prop2, ..., propN) gdzie key — liczba całkowita.
  • Dla ExecuteGlobal, ExecuteClass i ExecuteTable obsługiwany zakres wartości %Date odpowiada zakresowi mktime i zależy od systemu operacyjnego (windows: 1970-01-01, linux 1900-01-01, mac). Użyj %ZnacznikCzasudo przekazywania danych poza tym zakresem lub użyj pandas dataframe, ponieważ to ograniczenie dotyczy tylko listy.
  • Dla ExecuteGlobal, ExecuteClass i ExecuteTable wszystkie argumenty oprócz źródła danych (globalnej, klasy lub tabeli) oraz zmiennej są opcjonalne.

Przykłady

Klasa testowa isc.py.test.Person zawiera metodę, która demonstruje wszystkie sposoby przekazywania 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"

// Ogólne argumenty
set variable = "df"
set type = "dataframe"
set start = 1
set end = $g(^isc.py.test.PersonD, start)

// Sposób 0: ExecuteGlobal bez argumentów
set sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 0, type)

// Sposób 1: ExecuteGlobal z argumentami
// Podczas przekazywania globalnych nazw pól definiujemy je ręcznie
// globalKey - nazwa subskryptu
set labels = $lb("globalKey", "Name", "DOB", "TS", "RandomTime", "AgeYears", "AgeDecimal", "AgeDouble", "Bool")

// maska zawiera o 1 element mniej niż etykiety, ponieważ "globalKey" - nazwa subskryptu
// Pomijamy %%CLASSNAME
set mask = "-+dmt+++b"

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

// Sposób 2: ExecuteClass
set sc = ##class(isc.py.Main).ExecuteClass(class, variable _ 2, type, start, end)

// Sposób 3: ExecuteTable
set sc = ##class(isc.py.Main).ExecuteTable(table, variable _ 3, type, start, end)

// Sposób 4: ExecuteTable
set sc = ##class(isc.py.Main).ExecuteQuery(query, variable _ 4, type)

Wywołaj metodę 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) — uzyskaj informacje o zmiennej: czy jest zdefiniowana, klasa i długość serializacji.
  • GetVariableDefined(variable, .defined) — czy zmienna jest zdefiniowana.
  • GetVariableType(variable, .type) — uzyskaj klasę zmiennej.
  • GetStatus() — uzyskaj i usuń ostatni wyjątek po stronie Pythona.
  • GetModuleInfo(module, .imported, .alias) — uzyskaj zmienną modułu i status importu.
  • GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments) — uzyskaj informacje o funkcji.

Interoperacyjność

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

  • Wykonywanie kodu w Pythonie
  • Zapis/Przywracanie kontekstu Pythona
  • Ładowanie i pobieranie danych z Pythona

W zasadzie operacja w Pythonie to opakowanie wokół isc.py.Main. Operacja isc.py.ens.Operation umożliwia interakcję z procesem Pythona z produkcji InterSystems IRIS. Obsługiwanych jest pięć zapytań:

  • isc.py.msg.ExecutionRequest do wykonywania kodu w Pythonie. Zwraca isc.py.msg.ExecutionResponse z wynikiem wykonania i wartościami żądanych zmiennych.
  • isc.py.msg.StreamExecutionRequest do wykonywania kodu w Pythonie. Zwraca isc.py.msg.StreamExecutionResponse wynikiem wykonania i wartościami żądanych zmiennych. Odpowiednik isc.py.msg.ExecutionRequest, ale przyjmuje i zwraca strumienie zamiast łańcuchów.
  • isc.py.msg.QueryRequest do przekazywania wyniku wykonania zapytania SQL. Zwraca Ens.Response.
  • isc.py.msg.GlobalRequest/isc.py.msg.ClassRequest/isc.py.msg.TableRequest do przekazywania danych globalnych/klas/tabllic. Zwraca Ens.Response.
  • isc.py.msg.SaveRequest do zapisywania kontekstu Pythona. Zwraca Ens.StringResponse z identyfikatorem kontekstu.
  • isc.py.msg.RestoreRequest do przywracania kontekstu Pythona.

    Ponadto, isc.py.ens.Operation ma dwie opcje:

    • Initializer — wybór klasy, która implementuje interfejs isc.py.init.Abstract. Może być używana do ładowania funkcji, modułów, klas itp. Wykonywana jest jeden raz przy uruchamianiu procesu.
    • PythonLib — (tylko dla systemu Linux) jeśli widzisz błędy podczas ładowania, ustaw jej wartość na libpython3.6m.so lub nawet na pełną ścieżkę do biblioteki Pythona.

Tworzenie procesów biznesowych

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

  • isc.py.ens.ProcessUtils umożliwia wyodrębnianie adnotacji z aktywności z podstawianiem zmiennych.
  • isc.py.util.BPEmulator umożliwia łatwe testowanie procesów biznesowych w Pythonie. Może wykonywać proces biznesowy (części w języku Python) w bieżącym procesie.

Podstawianie zmiennych.

Wszystkie procesy biznesowe dziedziczące po isc.py.ens.ProcessUtils, mogą używać metody GetAnnotation(name) do uzyskiwania wartości adnotacji aktywności według jej nazwy. Adnotacja aktywności może zawierać zmienne, które będą obliczane po stronie InterSystems IRIS przed przekazaniem do Pythona. Oto składnia podstawiania zmiennych:

  • ${class:method:arg1:...:argN} — wywołaj metodę
  • #{expr} — wykonaj kod w języku ObjectScript.

Przykład dostępny w testowym procesie biznesowym isc.py.test.Process, na przykład w aktywności Macierz korelacji: Graf: f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png'). W tym przykładzie:

  • #{process.WorkDirectory} zwraca właściwość WorkDirectory obiektu process, będącego instancją klasy isc.py.test.Process tj. bieżącego procesu biznesowego.
  • ${%PopulateUtils:Integer:1:100} wywołuje metodę Integer klasy %PopulateUtils, przekazując argumenty 1 i 100, zwracając losową liczbę całkowitą w zakresie 1...100.

Testowy proces biznesowy

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

  1. W terminalu systemu operacyjnego wykonaj: pip install pandas matplotlib seaborn.
  2. W terminalu InterSystems IRIS wykonaj: do ##class(isc.py.test.CannibalizationData).Import() aby załadować dane testowe.
  3. Uruchom produkt isc.py.test.Production.
  4. Wyślij zapytanie typu Ens.Request do isc.py.test.Process.

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

Python Gateway w InterSystems IRIS

Wykonanie kodu

Najważniejsze wywołanie — wykonanie kodu Pythona:

Python Gateway w InterSystems IRIS

Używa zapytania isc.py.msg.ExecutionRequest, oto jego właściwości:

  • Kod — kod Pythona.
  • SeparateLines — czy rozdzielać kod na wiersze do wykonania. $c(10) (n) jest używane do dzielenia linii. Proszę zauważyć, że NIE zaleca się przetwarzania wiadomości całkowicie na raz, ta funkcja jest przeznaczona tylko do przetwarzania def i innych podobnych wyrażeń wieloliniowych. Domyślnie 0.
  • Zmienne — lista zmiennych oddzielonych przecinkami, które zostaną dodane do odpowiedzi.
  • Serializacja — Jak serializować zmienne, które chcemy zwrócić. Opcje: Str, Repr, YANG, Pickle i Dill, domyślnie Str.

W naszym przypadku tylko ustawiamy atrybut Kod, więc wszystkie pozostałe atrybuty używają wartości domyślnych. Ustawiamy to wywołując process.GetAnnotation("Import pandas"), który w czasie wykonywania zwraca adnotację po wykonaniu podstawień zmiennych. Ostatecznie kod import pandas as pd zostanie przekazany do Pythona. GetAnnotation może być przydatna do uzyskiwania wieloliniowych skryptów Pythona, ale nie ma żadnych ograniczeń co do tej metody pobierania kodu. Możesz ustawić atrybut Kod w dowolny sposób, który Ci odpowiada.

Uzyskiwanie zmiennych

Kolejne interesujące wywołanie przy użyciu isc.py.msg.ExecutionRequestMacierz korelacji: Tabularna:

Python Gateway w InterSystems IRIS

Oblicza Macierz Korelacji po stronie Pythona i wyciąga zmienną corrmat z powrotem do InterSystems IRIS w formacie JSON, poprzez ustawienie atrybutów zapytania:

  • Zmienne: "corrmat"
  • Serializacja: "JSON"

Możemy zobaczyć wyniki w Visual Trace:

Python Gateway w InterSystems IRIS

I jeśli ta wartość będzie potrzebna w BP, można ją uzyskać w ten sposób: callresponse.Variables.GetAt("corrmat").

Przesyłanie danych

Następnie omówimy przesyłanie danych z InterSystems IRIS do Pythona, wszystkie żądania przesyłania danych wdrażają interfejs isc.py.msg.DataRequest, który zapewnia następujące atrybuty:

  • Variable — zmienna Pythona, do której zapisywane są dane.
  • Type — typ zmiennej: dataframe (pandas dataframe) lub list.
  • Namespace — obszar, z którego uzyskujemy dane. Pakiet isc.py musi być dostępny w tym obszarze. Może to być obszar bez wsparcia produktów.

Na podstawie tego interfejsu zrealizowano 4 klasy żądań:

  • isc.py.msg.QueryRequest — ustaw atrybut Query do przesyłania zapytania SQL.
  • isc.py.msg.ClassRequest — ustaw atrybut Class do przesyłania danych klasy.
  • isc.py.msg.TableRequest — ustaw atrybut Tabela do przesyłania danych tabeli.
  • isc.py.msg.GlobalRequest — ustaw atrybut Global do przesyłania danych globalnych.

W procesie testowym sprawdź aktywność RAW, gdzie isc.py.msg.QueryRequest pokazane w akcji.

Python Gateway w InterSystems IRIS

Zapis / przywracanie kontekstu Pythona

Na koniec możemy zapisać kontekst Pythona w InterSystems IRIS, aby to zrobić, wyślemy isc.py.msg.SaveRequest z argumentami:

  • Mask — Zapisane zostaną tylko zmienne, które odpowiadają masce. Obsługiwane * i ?. Przykład: "Data*, Figure?". Domyślnie *.
  • MaxLength — Maksymalna długość przechowywanej zmiennej. Jeśli serializacja zmiennej będzie dłuższa, zostanie zignorowana. Ustaw 0, aby uzyskać zmienne dowolnej długości. Domyślnie $$$MaxStringLength.
  • Nazwa — Nazwa kontekstu (opcjonalnie).
  • Opis — Opis kontekstu (opcjonalnie).

Zwraca Ens.StringResponse z Id przechowywanego kontekstu. W procesie testowym sprawdź aktywność Zapisz kontekst.

Odpowiednie zapytanie isc.py.msg.RestoreRequest ładuje kontekst z InterSystems IRIS do Pythona:

  • ContextId — identyfikator kontekstu.
  • Wyczyść — wyczyść kontekst przed przywróceniem.

Jupyter Notebook

Jupyter Notebook — to aplikacja internetowa z otwartym źródłem, która pozwala tworzyć notatniki zawierające kod, wizualizacje i tekst oraz publikować je. Python Gateway pozwala przeglądać i edytować procesy BPL w formie Jupyter Notebook. Zwróć uwagę, że obecnie używany jest standardowy executor Pythona 3.

To rozszerzenie zakłada, że adnotacje zawierają kod Pythona i wykorzystują nazwy aktywności jako wcześniejsze nagłówki. Teraz możliwe jest rozwijanie procesów biznesowych PythonGateway w Jupyter Notebook. Oto co jest możliwe:

  • Tworzyć nowe procesy biznesowe
  • Usuwać procesy biznesowe
  • Tworzyć nowe aktywności
  • Modyfikować aktywności
  • Usuwać aktywności

Oto film demo. I kilka zrzutów ekranu:

Eksplorator procesów

Python Gateway w InterSystems IRIS

Edytor procesu

Python Gateway w InterSystems IRIS

Instalacja

  1. Potrzebujesz InterSystems IRIS 2019.2+.
  2. Zainstaluj PythonGateway v0.8+ (wymagane tylko isc.py.util.Jupyter, isc.py.util.JupyterCheckpoints i isc.py.ens.ProcessUtils).
  3. Zaktualizuj kod ObjectScript z repozytorium.
  4. Wykonaj do ##class(isc.py.util.Jupyter).Install() i postępuj zgodnie z instrukcjami.

Dokumentacja.

Wnioski

MLToolkit to zestaw narzędzi mający na celu integrację modeli i środowiska transakcyjnego, aby stworzone modele można było łatwo wykorzystywać bezpośrednio w twoich procesach biznesowych. Python Gateway jest częścią MLToolkit i zapewnia integrację z językiem Python, umożliwiając orkiestrację wszelkich algorytmów uczenia maszynowego tworzonych w języku Python (główne środowisko dla wielu naukowców danych), a także korzystanie z licznych gotowych bibliotek do szybkiego tworzenia adaptacyjnych, zrobotyzowanych rozwiązań analitycznych AI/ML na platformie InterSystems IRIS.

Linki

MLToolkit

Grupa użytkowników MLToolkit to prywatne repozytorium GitHub, utworzone w ramach korporacyjnej organizacji GitHub InterSystems. Jest skierowana do zewnętrznych użytkowników, którzy instalują, badają lub już korzystają z komponentów MLToolkit, w tym Python Gateway. W grupie dostępny jest szereg zrealizowanych przypadków (z kodem źródłowym i danymi testowymi) w obszarach marketingu, produkcji, medycyny i wielu innych branż. Aby dołączyć do grupy użytkowników ML Toolkit, prosimy o wysłanie krótkiej wiadomości e-mail na adres: MLToolkit@intersystems.com i podanie w swoim liście następujących danych:

  • Nazwa użytkownika GitHub
  • Organizacja (w której pracujesz lub się uczysz)
  • Stanowisko (twoje rzeczywiste stanowisko w organizacji, lub "Student", lub "Freelancer").
  • Kraj

Osobom, które przeczytały artykuł i są zainteresowane możliwościami InterSystems IRIS jako platformy dla rozwoju lub hostingowych mechanizmów sztucznej inteligencji i uczenia maszynowego, proponujemy omówienie możliwych scenariuszy, które mogą być interesujące dla twojego przedsiębiorstwa. Chętnie przeanalizujemy potrzeby twojego przedsiębiorstwa i wspólnie określimy plan działania; adres e-mail naszej ekspertnej grupy AI/ML to: MLToolkit@intersystems.com.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster