El multihilo, o ejecución concurrente de hilos, permite ganancias de rendimiento sustanciales en comparación con una ejecución secuencial. Para los procedimientos que se ejecutan en CAS, el número de hilos se determina por la instalación. El modelo de multihilo se basa principalmente en la división de los datos procesados en una sola máquina entre los hilos disponibles. Por ejemplo, si una tabla de 1.000 observaciones es procesada por cuatro hilos, cada hilo gestiona 250 observaciones. Todas las operaciones que acceden a los datos (como la normalización de variables, la formación de matrices, el cálculo de objetivos, gradientes, Hessianos, y la puntuación de observaciones) son entonces multihilo. Las operaciones matriciales también se benefician del multihilo si el tamaño de las matrices es suficiente para justificar la gestión de múltiples hilos.
Análisis de datos
Type : CREATION_INTERNE
Los ejemplos utilizan datos generados (datalines) o tablas SASHELP para garantizar su autonomía.
1 Bloque de código
PROC FACTMAC Data
Explicación : Este ejemplo ilustra un uso básico del procedimiento FACTMAC. Comienza creando una pequeña tabla de datos en memoria CAS (`casuser.produits`). Luego, `PROC FACTMAC` se ejecuta en esta tabla, especificando un modelo simple donde 'prix' es la variable dependiente y 'produit' y 'stock' son los predictores. El resultado se guarda en una nueva tabla CAS, 'casuser.factmac_output'. El multihilo es gestionado automáticamente por el servidor CAS para optimizar los cálculos, distribuyendo las observaciones entre los hilos disponibles.
¡Copiado!
/* Création d'une table CAS simple pour la démonstration */
data casuser.produits;
input produit $ prix stock;
datalines;
Pomme 1.0 100
Banane 0.5 200
Orange 1.2 150
Poire 0.8 120
Raisin 2.5 50
;
run;
/* Exécution basique de PROC FACTMAC */
proc factmac data=casuser.produits;
model prix = produit stock;
output out=casuser.factmac_output;
run;
/* Affichage des résultats (partiel) */
proc print data=casuser.factmac_output (obs=5);
run;
proc casutil incaslib="casuser";
droptable casdata="produits" quiet;
droptable casdata="factmac_output" quiet;
run;
1
/* Création d'une table CAS simple pour la démonstration */
2
DATA casuser.produits;
3
INPUT produit $ prix stock;
4
DATALINES;
5
Pomme 1.0100
6
Banane 0.5200
7
Orange 1.2150
8
Poire 0.8120
9
Raisin 2.550
10
;
11
RUN;
12
13
/* Exécution basique de PROC FACTMAC */
14
PROC FACTMACDATA=casuser.produits;
15
model prix = produit stock;
16
OUTPUT out=casuser.factmac_output;
17
RUN;
18
19
/* Affichage des résultats (partiel) */
20
PROC PRINTDATA=casuser.factmac_output (obs=5);
21
RUN;
22
23
PROC CASUTIL incaslib="casuser";
24
droptable casdata="produits" quiet;
25
droptable casdata="factmac_output" quiet;
26
RUN;
2 Bloque de código
PROC FOREST Data
Explicación : Este ejemplo utiliza `PROC FOREST` para entrenar un modelo de bosque aleatorio para predecir la lealtad de un cliente. Incluye opciones comunes como `NTREE` para especificar el número de árboles a construir, `MAXDEPTH` para la profundidad máxima de los árboles y `SEED` para la reproducibilidad. Los cálculos intensivos de construcción de árboles y procesamiento de datos son paralelizados automáticamente por CAS en varios hilos, acelerando el entrenamiento del modelo. Los resultados y el modelo entrenado se guardan en tablas CAS.
¡Copiado!
/* Création d'une table CAS pour la démonstration de classification */
data casuser.clients;
call streaminit(123);
do i=1 to 1000;
age = rand('uniform', 18, 65);
revenu = rand('normal', 50000, 15000);
satisfaction_produit = ceil(rand('uniform', 1, 5));
if revenu > 60000 and age > 30 then
loyal = 1;
else
loyal = 0;
output;
end;
drop i;
run;
/* Exécution de PROC FOREST avec des options courantes */
proc forest data=casuser.clients;
input age revenu satisfaction_produit;
target loyal;
ods output FitStatistics=casuser.forest_stats;
train ntree=100 seed=1234 maxdepth=10;
save rstore=casuser.forest_model;
run;
/* Affichage des statistiques d'ajustement */
proc print data=casuser.forest_stats;
run;
proc casutil incaslib="casuser";
droptable casdata="clients" quiet;
droptable casdata="forest_stats" quiet;
droptable casdata="forest_model" quiet;
run;
1
/* Création d'une table CAS pour la démonstration de classification */
/* Exécution de PROC FOREST avec des options courantes */
18
PROC FORESTDATA=casuser.clients;
19
INPUT age revenu satisfaction_produit;
20
target loyal;
21
ods OUTPUT FitStatistics=casuser.forest_stats;
22
train ntree=100 seed=1234 maxdepth=10;
23
save rstore=casuser.forest_model;
24
RUN;
25
26
/* Affichage des statistiques d'ajustement */
27
PROC PRINTDATA=casuser.forest_stats;
28
RUN;
29
30
PROC CASUTIL incaslib="casuser";
31
droptable casdata="clients" quiet;
32
droptable casdata="forest_stats" quiet;
33
droptable casdata="forest_model" quiet;
34
RUN;
3 Bloque de código
PROC NNET Data
Explicación : Este ejemplo demuestra la puntuación de datos con un modelo de aprendizaje automático, basándose en un enfoque común donde un modelo (como NNET) sería entrenado y luego utilizado para predecir sobre nuevos datos. Aunque `PROC NNET` en sí misma no se llama explícitamente para el entrenamiento aquí (para simplificar la demostración sin un modelo preexistente complejo), el concepto de puntuación de un gran volumen de datos es muy relevante para el multihilo. El Paso de Datos se ejecuta directamente sobre los datos en memoria CAS, y CAS distribuye automáticamente las tareas de cálculo (aquí, la simulación de puntuación) en varios hilos, permitiendo un procesamiento eficiente de grandes conjuntos de datos.
¡Copiado!
/* Création d'une table CAS avec des données de test */
data casuser.test_data;
call streaminit(456);
do i=1 to 200;
age = rand('uniform', 20, 70);
revenu = rand('normal', 60000, 20000);
satisfaction_produit = ceil(rand('uniform', 1, 5));
output;
end;
drop i;
run;
/* Utilisation d'un modèle NNET pré-entraîné (ici, simulé par des coefficients simples) */
/* Dans un scénario réel, un modèle NNET serait entraîné et sauvegardé */
/* Ici, nous simulons l'étape de scoring */
data casuser.scored_data;
set casuser.test_data;
/* Simulation d'un scoring simple basé sur les inputs */
score_loyal = 0.5 + 0.01 * age + 0.00001 * revenu - 0.1 * satisfaction_produit;
if score_loyal > 0.7 then predicted_loyal = 1; else predicted_loyal = 0;
run;
/* Affichage des données scorées */
proc print data=casuser.scored_data (obs=10);
run;
proc casutil incaslib="casuser";
droptable casdata="test_data" quiet;
droptable casdata="scored_data" quiet;
run;
1
/* Création d'une table CAS avec des données de test */
Explicación : Este ejemplo utiliza `PROC GRADBOOST` para entrenar un modelo de boosting de gradiente en datos de ventas, aprovechando las capacidades distribuidas de CAS. La cláusula `PARTITION region_id` indica a CAS que procese los datos por región, lo que puede mejorar el rendimiento y la escalabilidad al distribuir los cálculos en los nodos CAS. Cada partición puede ser procesada en paralelo por varios hilos. Aunque no hay una opción `NTHREADS` explícita aquí, el servidor CAS subyacente asignará automáticamente y eficientemente los recursos de procesamiento (es decir, los hilos) en función de la configuración del entorno y el tamaño de los datos, maximizando la ventaja del multihilo para el entrenamiento del modelo.
¡Copiado!
/* Création d'une table CAS avec une variable de partitionnement */
data casuser.ventes;
call streaminit(789);
do i=1 to 5000;
region_id = ceil(rand('uniform', 1, 4)); /* 4 régions */
publicite = rand('uniform', 0, 1000);
prix = rand('uniform', 10, 100);
ventes_reelles = 500 + 2 * publicite - 3 * prix + (region_id * 100) + rand('normal', 0, 50);
output;
end;
drop i;
run;
/* Utilisation de PROC GRADBOOST avec PARTITION et options de thread (implicites CAS) */
proc gradboost data=casuser.ventes;
input publicite prix;
target ventes_reelles;
partition region_id;
/* Les options de multithreading sont gérées par le serveur CAS. */
/* L'option NTHREADS peut être utilisée dans certaines procs pour limiter explicitement. */
/* Ici, nous laissons CAS gérer l'allocation automatique des threads par défaut. */
ods output IterationHistory=casuser.gradboost_hist;
run;
/* Affichage de l'historique d'itération */
proc print data=casuser.gradboost_hist (obs=10);
run;
proc casutil incaslib="casuser";
droptable casdata="ventes" quiet;
droptable casdata="gradboost_hist" quiet;
run;
1
/* Création d'une table CAS avec une variable de partitionnement */
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.