session batchresults

Escenario Estándar: Desacoplar un Entrenamiento de Modelo de Larga Duración

Scénario de test & Cas d'usage

Contexto empresarial

Un científico de datos está entrenando un modelo de machine learning (regresión logística) sobre un gran conjunto de datos de clientes para predecir el abandono. El entrenamiento es computacionalmente intensivo y se espera que dure varias horas. El científico de datos necesita liberar su sesión de SAS Viya para realizar otras tareas de análisis exploratorio mientras el modelo se entrena en segundo plano.
Sobre el conjunto : session

Gestión del estado de la sesión CAS.

Descubrir todas las acciones de session
Preparación de datos

Creación de una tabla de clientes simulada con 1 millón de registros y varias características para el entrenamiento del modelo. La tabla 'WORK.CLIENT_DATA' se cargará en CAS.

¡Copiado!
1DATA WORK.CLIENT_DATA;
2 call streaminit(123);
3 DO i = 1 to 1000000;
4 ID_CLIENTE = i;
5 ANTIGUEDAD_MESES = floor(rand('UNIFORM') * 120) + 1;
6 NUM_PRODUCTOS = floor(rand('UNIFORM') * 5) + 1;
7 SALDO_CUENTA = rand('NORMAL', 10000, 2500);
8 PUNTUACION_CREDITO = floor(rand('UNIFORM') * 550) + 300;
9 ABANDONO = rand('BERNOULLI', 0.2);
10 OUTPUT;
11 END;
12RUN;

Étapes de réalisation

1
Cargar la tabla de datos de clientes en una tabla CAS global llamada 'CLIENT_DATA_CAS'.
¡Copiado!
1PROC CAS;
2 TABLE.loadTable /
3 caslib='CASUSER'
4 path='CLIENT_DATA'
5 casOut={name='CLIENT_DATA_CAS', promote=true};
6RUN;
2
Iniciar una nueva sesión CAS ('training_session') y comenzar un entrenamiento de regresión logística de forma asíncrona para obtener un 'job handle'.
¡Copiado!
1SESSION training_session;
2 ACTION logistic.glm /
3 TABLE={name='CLIENT_DATA_CAS'}
4 class={'NUM_PRODUCTOS'}
5 model={depvar='ABANDONO', effects={'ANTIGUEDAD_MESES', 'SALDO_CUENTA', 'PUNTUACION_CREDITO', 'NUM_PRODUCTOS'}}
6 async='logisticJob';
7RUN;
3
Desde la sesión principal, obtener el UUID de 'training_session' usando la acción 'listSessions'.
¡Copiado!
1SESSION; /* Volver a la sesión principal */
2 ACTION listSessions RESULT=r;
3 /* El siguiente paso en un programa real sería encontrar el UUID programáticamente */
4 /* Para este test, asumimos que se ha identificado y almacenado en una macro variable o string */
4
Usar 'batchresults' para cambiar la acción de entrenamiento a modo de lote, usando el UUID de la sesión de entrenamiento. Se espera que la sesión principal se libere inmediatamente.
¡Copiado!
1/* Asumir que 'sess_uuid' contiene el UUID de 'training_session' */
2 
3SESSION.batchresults uuid="<uuid_de_training_session>";
4RUN;
5 

Resultado esperado


La acción `logistic.glm` debe continuar ejecutándose en el servidor en la `training_session`. La sesión principal del cliente debe quedar libre inmediatamente después de la llamada a `batchresults`, permitiendo ejecutar otras acciones. El log debe confirmar que la acción fue cambiada a modo de lote. Más tarde, los resultados del trabajo 'logisticJob' podrán ser recuperados usando `fetchresult`.