Multithreading, oder die gleichzeitige Ausführung von Threads, ermöglicht erhebliche Leistungssteigerungen im Vergleich zur sequentiellen Ausführung. Bei Prozeduren, die in CAS ausgeführt werden, wird die Anzahl der Threads durch die Installation bestimmt. Das Multithreading-Modell basiert hauptsächlich auf der Aufteilung der auf einer einzelnen Maschine verarbeiteten Daten auf die verfügbaren Threads. Wenn beispielsweise eine Tabelle mit 1.000 Beobachtungen von vier Threads verarbeitet wird, verwaltet jeder Thread 250 Beobachtungen. Alle Operationen, die auf Daten zugreifen (wie die Normalisierung von Variablen, die Bildung von Matrizen, die Berechnung von Zielen, Gradienten, Hess'schen Matrizen und das Scoring von Beobachtungen), sind dann multithreaded. Auch Matrixoperationen profitieren vom Multithreading, wenn die Größe der Matrizen ausreicht, um die Verwaltung mehrerer Threads zu rechtfertigen.
Datenanalyse
Type : CREATION_INTERNE
Die Beispiele verwenden generierte Daten (Datalines) oder SASHELP-Tabellen, um ihre Autonomie zu gewährleisten.
1 Codeblock
PROC FACTMAC Data
Erklärung : Dieses Beispiel veranschaulicht eine grundlegende Verwendung der FACTMAC-Prozedur. Es beginnt mit der Erstellung einer kleinen Datentabelle im CAS-Speicher (`casuser.produits`). Anschließend wird `PROC FACTMAC` auf dieser Tabelle ausgeführt, wobei ein einfaches Modell spezifiziert wird, in dem 'prix' die abhängige Variable und 'produit' und 'stock' die Prädiktoren sind. Das Ergebnis wird in einer neuen CAS-Tabelle, 'casuser.factmac_output', gespeichert. Multithreading wird vom CAS-Server automatisch verwaltet, um die Berechnungen zu optimieren, indem die Beobachtungen auf die verfügbaren Threads verteilt werden.
Kopiert!
/* Création d'une table CAS simple pour la démonstration */\ndata casuser.produits;\n input produit $ prix stock;\n datalines;\nPomme 1.0 100\nBanane 0.5 200\nOrange 1.2 150\nPoire 0.8 120\nRaisin 2.5 50\n;\nrun;\n\n/* Exécution basique de PROC FACTMAC */\nproc factmac data=casuser.produits;\n model prix = produit stock;\n output out=casuser.factmac_output;\nrun;\n\n/* Affichage des résultats (partiel) */\nproc print data=casuser.factmac_output (obs=5);\nrun;\n\nproc casutil incaslib=\"casuser\";\n droptable casdata=\"produits\" quiet;\n droptable casdata=\"factmac_output\" quiet;\nrun;
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 Codeblock
PROC FOREST Data
Erklärung : Dieses Beispiel verwendet `PROC FOREST`, um ein Zufallswaldmodell zu trainieren, das die Kundentreue vorhersagt. Es enthält gängige Optionen wie `NTREE` zur Angabe der Anzahl der zu erstellenden Bäume, `MAXDEPTH` für die maximale Tiefe der Bäume und `SEED` für die Reproduzierbarkeit. Die intensiven Berechnungen zur Baumkonstruktion und Datenverarbeitung werden von CAS automatisch auf mehrere Threads parallelisiert, was die Modellschulung beschleunigt. Die Ergebnisse und das trainierte Modell werden in CAS-Tabellen gespeichert.
Kopiert!
/* Création d'une table CAS pour la démonstration de classification */\ndata casuser.clients;\n call streaminit(123);\n do i=1 to 1000;\n age = rand('uniform', 18, 65);\n revenu = rand('normal', 50000, 15000);\n satisfaction_produit = ceil(rand('uniform', 1, 5));\n if revenu > 60000 and age > 30 then\n loyal = 1;\n else\n loyal = 0;\n output;\n end;\n drop i;\nrun;\n\n/* Exécution de PROC FOREST avec des options courantes */\nproc forest data=casuser.clients;\n input age revenu satisfaction_produit;\n target loyal;\n ods output FitStatistics=casuser.forest_stats;\n train ntree=100 seed=1234 maxdepth=10;\n save rstore=casuser.forest_model;\nrun;\n\n/* Affichage des statistiques d'ajustement */\nproc print data=casuser.forest_stats;\nrun;\n\nproc casutil incaslib=\"casuser\";\n droptable casdata=\"clients\" quiet;\n droptable casdata=\"forest_stats\" quiet;\n droptable casdata=\"forest_model\" quiet;\nrun;
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 Codeblock
PROC NNET Data
Erklärung : Dieses Beispiel demonstriert das Scoring von Daten mit einem Machine-Learning-Modell, basierend auf einem gängigen Ansatz, bei dem ein Modell (wie NNET) trainiert und dann zur Vorhersage neuer Daten verwendet wird. Obwohl `PROC NNET` hier nicht explizit für das Training aufgerufen wird (um die Demonstration ohne ein komplexes, bereits vorhandenes Modell zu vereinfachen), ist das Konzept des Scorings großer Datenmengen für Multithreading sehr relevant. Der Data Step wird direkt auf den Daten im CAS-Speicher ausgeführt, und CAS verteilt die Berechnungsaufgaben (hier die Scoring-Simulation) automatisch auf mehrere Threads, was eine effiziente Verarbeitung großer Datensätze ermöglicht.
Kopiert!
/* Création d'une table CAS avec des données de test */\ndata casuser.test_data;\n call streaminit(456);\n do i=1 to 200;\n age = rand('uniform', 20, 70);\n revenu = rand('normal', 60000, 20000);\n satisfaction_produit = ceil(rand('uniform', 1, 5));\n output;\n end;\n drop i;\nrun;\n\n/* Utilisation d'un modèle NNET pré-entraîné (ici, simulé par des coefficients simples) */\n/* Dans un scénario réel, un modèle NNET serait entraîné et sauvegardé */\n/* Ici, nous simulons l'étape de scoring */\n\ndata casuser.scored_data;\n set casuser.test_data;\n /* Simulation d'un scoring simple basé sur les inputs */\n score_loyal = 0.5 + 0.01 * age + 0.00001 * revenu - 0.1 * satisfaction_produit;\n if score_loyal > 0.7 then predicted_loyal = 1; else predicted_loyal = 0;\nrun;\n\n/* Affichage des données scorées */\nproc print data=casuser.scored_data (obs=10);\nrun;\n\nproc casutil incaslib=\"casuser\";\n droptable casdata=\"test_data\" quiet;\n droptable casdata=\"scored_data\" quiet;\nrun;
1
/* Création d'une table CAS avec des données de test */
Erklärung : Dieses Beispiel verwendet `PROC GRADBOOST`, um ein Gradient-Boosting-Modell für Verkaufsdaten zu trainieren, wobei die verteilten Funktionen von CAS genutzt werden. Die Klausel `PARTITION region_id` weist CAS an, die Daten nach Region zu verarbeiten, was die Leistung und Skalierbarkeit durch die Verteilung der Berechnungen auf CAS-Knoten verbessern kann. Jede Partition kann parallel von mehreren Threads verarbeitet werden. Obwohl hier keine explizite `NTHREADS`-Option vorhanden ist, weist der zugrunde liegende CAS-Server die Verarbeitungsressourcen (d.h. die Threads) automatisch und effizient entsprechend der Umgebungskonfiguration und der Datengröße zu, wodurch der Vorteil von Multithreading für das Modelltraining maximiert wird.
Kopiert!
/* Création d'une table CAS avec une variable de partitionnement */\ndata casuser.ventes;\n call streaminit(789);\n do i=1 to 5000;\n region_id = ceil(rand('uniform', 1, 4)); /* 4 régions */\n publicite = rand('uniform', 0, 1000);\n prix = rand('uniform', 10, 100);\n ventes_reelles = 500 + 2 * publicite - 3 * prix + (region_id * 100) + rand('normal', 0, 50);\n output;\n end;\n drop i;\nrun;\n\n/* Utilisation de PROC GRADBOOST avec PARTITION et options de thread (implicites CAS) */\nproc gradboost data=casuser.ventes;\n input publicite prix;\n target ventes_reelles;\n partition region_id;\n /* Les options de multithreading sont gérées par le serveur CAS. */\n /* L'option NTHREADS peut être utilisée dans certaines procs pour limiter explicitement. */\n /* Ici, nous laissons CAS gérer l'allocation automatique des threads par défaut. */\n ods output IterationHistory=casuser.gradboost_hist;\nrun;\n\n/* Affichage de l'historique d'itération */\nproc print data=casuser.gradboost_hist (obs=10);\nrun;\n\nproc casutil incaslib=\"casuser\";\n droptable casdata=\"ventes\" quiet;\n droptable casdata=\"gradboost_hist\" quiet;\nrun;
1
/* Création d'une table CAS avec une variable de partitionnement */
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.