sassoftware / python-sasctl

Python package and CLI for user-friendly integration with SAS Viya
https://sassoftware.github.io/python-sasctl
Apache License 2.0
46 stars 41 forks source link

Error using SASCTL to register a Python model to MM in Viya 4 #136

Open ggrabow1 opened 1 year ago

ggrabow1 commented 1 year ago

Describe the issue SASCTL 1.7.3 can register a simple Python model to MM in Viya 4, but when trying to execute a Scoring Task it produces an error.

To Reproduce import pandas as pd from sasctl import Session, register_model, publish_model from sklearn.linear_model import LogisticRegression

Load the Iris data set and split into features and target.

df = pd.read_csv('Data/iris.csv') X = df.drop('species', axis=1) y = df.species.astype('category')

Fit a sci-kit learn model

model = LogisticRegression() model.fit(X, y)

with Session('budsprod.viyamtes.com', 'gegrab', 'XXXXX', verify_ssl=False): model_name = 'Iris Regression2'

Register the model in Model Manager

register_model(model, model_name, input=X, # Use X to determine model inputs project='Iris2', # Register in "Iris" project force=True) # Create project if it doesn't exist

Expected behavior The Scoring Task in MM should execute and score on a sample set of records. The error received in MM:

NOTE: Created package _076796cfb3ca459eb8a285e3cd30c38 in data set "casuser(gegrab)"._076796cfb3ca459eb8a285e3cd30c38. NOTE: Execution succeeded. No rows affected. NOTE: Running 'modelPublishing' action set with 0 workers. NOTE: Execution of model 'TempModel_781437f5-15be-3842-99a0-eea05a45c6ba ' succeeded. ERROR: There is no session-scope table Test_3_Iris_Regression2_v1_0_2022_11_04_14_42_49_output in caslib gegrab_s of Cloud Analytic Services. NOTE: Cloud Analytic Services dropped table TempModel_781437f5-15be-3842-99a0-eea05a45c6ba**

Stack Trace If you're experiencing an exception, include the full stack trace and error message.

Version What version of sasctl are you using? 1.7.3

smlindauer commented 1 year ago

Hey @ggrabow1,

I believe that the register_model() function will only work for SAS Viya 3.5 if you are trying to register a Python model (it handles astore and cas generated models as expected in SAS Viya 4). This is caused by a differing set of file requirements between SAS Viya 3.5 and SAS Viya 4. In Viya 4, Model Manager only expects to see Python code and the pickle file, then it automatically generates the DS2 wrapper when you publish or score the model.

As such, I would suggest trying to use the pzmm submodule for importing Python models into SAS Viya 4. I will add a bug to check the Viya version when importing a Python model with register_model.