Istanze ottimali di SQ3 per core e script per la loro gestione
21 risposte
Soglia
8 anni fa #115144
Qual è il numero ottimale di istanze SQ3 per core?
Faccio un'istanza SQ per core ed è multithread, quindi faccio 2 thread per SQ sui miei vecchi Dell Poweredges.
Esistono programmi o script per gestire istanze multiple di software? Il mio nuovo server ha 32 core, quindi 32 istanze di SQ3, forse 16, che probabilmente installerò ed eseguirò su di esso per ottenere una velocità di generazione della strategia ottimale. È un sacco di lavoro cambiare le loro impostazioni e tutto il resto se voglio che facciano tutte la stessa cosa.
mikeyc
8 anni fa #137094
SQ è multithread, puoi spiegare perché lo fai? Forse mi sono perso qualcosa in una discussione da qualche parte....
Soglia
8 anni fa #137097
Si ottengono risultati molto più rapidi eseguendo istanze multiple. SQ3 utilizza il multithreading e i core in modo molto inefficiente anche con l'hack Zulu.
1 SQ per core utilizzando 2 thread sembra essere ottimale, forse anche 1 SQ per thread.
_Cujo
8 anni fa #137102
In questo momento sto eseguendo 4 istanze di SQ su questa macchina (ho scattato la foto dello schermo un po' di tempo fa, poi mi sono distratto, ma è ancora in funzione adesso). Con l'hack di Zulu e la riga di comando dal thread di Geektrader.
Non è super veloce o altro, ma funziona bene. All'inizio del mese ho cambiato macchina, facendo un downgrade in realtà, dato che l'ultima macchina era eccessiva.
statistica
7 anni fa #137325
Qual è il numero ottimale di istanze SQ3 per core?
Faccio un'istanza SQ per core ed è multithread, quindi faccio 2 thread per SQ sui miei vecchi Dell Poweredges.
Esistono programmi o script per gestire istanze multiple di software? Il mio nuovo server ha 32 core, quindi 32 istanze di SQ3, forse 16, che probabilmente installerò ed eseguirò su di esso per ottenere una velocità di generazione della strategia ottimale. È un sacco di lavoro cambiare le loro impostazioni e tutto il resto se voglio che facciano tutte la stessa cosa.
Credo che tu abbia 16 core reali / 32 thread. Ho la stessa macchina (due socket Xeon E5-2630), SQ non può utilizzare più di 4 core reali, quindi è possibile utilizzare 16 core reali ed eseguire 4 istanze SQ e lo caricherà 98%, ma è necessario ottimizzare il disco (SSD-PCI-X in RAID0 andrà bene).
Anche se si abilita il 32 su SQ non farà alcuna differenza rispetto a 4 thread. Ho effettuato test approfonditi su diverse macchine e queste sono le prestazioni ottimali; se si eseguono più istanze, queste lotteranno per il tempo della CPU e si formeranno lunghe code. Ma non ho controllato la quantità di strategie, parlo solo del carico della CPU e delle code. Se potete verificare per me l'effettiva velocità di generazione X strategie/minuto. Penso che potrebbe valere la pena di scartare l'accodamento della CPU.
Se eseguite questo test, mi sarete utili per fare lo stesso:
Test #1 Eseguire 1-2-3-4-x istanze SQ per caricare la CPU 100% e misurare quante generazioni ha creato (in questo caso utilizzare Random, in media sarà la stessa dimensione delle strategie.
Test #2 Eseguite 1-2-3-4-x + 1-2-3-4 altre istanze di SQ e misurate quante strategie vengono generate.
Spero che su quella macchina sia in funzione Server 2012 o almeno Windows 10.
In questo modo possiamo scoprire qual è l'optimum. Non ho applicato alcun hack e non è necessario, tutti i core reali sono caricati al massimo.
Aspetterò i vostri risultati e poi posterò i miei.
======
_Cujo
Usare il Cloud è uno spreco di soldi, non ti daranno mai dei core reali, ma delle schifose vCPU che sono 4-10 volte più lente dei core reali. Scegliete un server dedicato o comprate una macchina E5 decente.
mentaledge
7 anni fa #137331
L'esecuzione di più istanze consente di ottenere una certa parallelizzazione del flusso di lavoro, utile quando si desidera suddividere le cose in una serie di blocchi più piccoli.
Sono nuovo di SQ e ciò che mi lascia perplesso è che nonostante il numero di core o la macchina stessa la "CPU occupata" non supera i 50%.
Mi sfugge qualcosa che impedisce a SQ di utilizzare tutte le risorse disponibili?
statistica
7 anni fa #137332
L'esecuzione di più istanze consente di ottenere una certa parallelizzazione del flusso di lavoro, utile quando si desidera suddividere le cose in una serie di blocchi più piccoli.
Sono nuovo di SQ e ciò che mi lascia perplesso è che nonostante il numero di core o la macchina stessa la "CPU occupata" non supera i 50%.
Mi sfugge qualcosa che impedisce a SQ di utilizzare tutte le risorse disponibili?
Si prega di leggere la mia risposta precedente sulla macchina con 16 core reali. 1 istanza utilizza solo 25% per tutti i 16 core (nonostante la configurazione per l'utilizzo di 16 core o 32 thread), quindi ho deciso che si tratta di 4 core. Uso un'altra macchina con 4 core e lo stesso SET usa 98% di CPU. Penso che Sq3 utilizzi al massimo 4x core reali e 7GB di ram (non 6GB come è stato detto, ma 7GB (6,8GB)), il server ha 38GHz di potenza del processore (il threading non è mai contato, viene come un bonus), e sono TUTTI utilizzati solo con 4 istanze, ma io ne uso 6, solo per essere sicuro di spremere tutto il succo da esso, nonostante la coda della CPU.
mentaledge
7 anni fa #137333
Sì, ho capito, quello che volevo dire è che vedo lo stesso basso carico anche con 4 core. Questo è per la fase di generazione.
geektrader
7 anni fa #137337
I miei risultati sono che 1,5 thread per istanza sono ottimali (calcolo teorico), ho capito molto tempo fa qual è l'optimum. Dato che il valore è di 1,5 thread, mi attengo a 1 thread per istanza, anche perché la memoria viene raddoppiata se si passa da 1 a 2 thread, ma l'utilizzo della CPU non è realmente raddoppiato (solo ~1,6). Quindi 1 thread per istanza è l'optimum per me. L'avvio avviene tramite un file .bat che copia SQ in X directory e poi le lancia tutte (è necessario farlo tramite la riga di comando "START blah.exe" di Windows dall'interno del file .bat, altrimenti il file .bat esce dopo aver lanciato la prima istanza di SQ).
Esempio di 4 istanze (usando directory compresse via NTFS se disponibili, pulendo i temp / log di SQ prima della copia in modo che non vengano copiati, avviandole tutte con priorità BASSA in modo da poter fare altro lavoro e le istanze di SQ usano solo la quantità di CPU attualmente inutilizzata dal mio lavoro quotidiano normale, usando exclusion.txt per evitare di copiare la mia directory /strategies/ dato che è enorme e non ha bisogno di essere copiata per ogni istanza dato che posso semplicemente caricarla dalla directory principale di SQ da ogni istanza):
@echo off rmdir "C:\Program Files\StrategyQuant\temp" /S /Q rmdir "C:\Program Files\StrategyQuant\log" /S /Q rmdir "c:\temp\strategyquant-temp" /S /Q mkdir "c:\temp\strategyquant-temp" mkdir "c:\temp\strategyquant-temp\1" mkdir "c:\temp\code(01)02" mkdir "c:\temp\code(01)02" mkdir "c:\temp\code(0144)/strategyquant-temp\4" compact /c /s: "c:\temp\code(01)01" compact /c /s: "c:\temp\strategyquant-temp\2" compact /c /s: "c:\temp\strategyquant-temp\3" compatto /c /s: "c:\temp\i}strategiaquantitativa-temp\4" c: xcopia "C:\Program Files\StrategyQuant" "c:\temp\strategyquant-temp\1" /E /Y /EXCLUDE:exclusion.txt CD "c:\temp\strategyquant-temp\1" start /LOW StrategyQuant64.exe -J-server -J-Xmx2500m -J-XX:+DisableExplicitGC -J-XX:+AggressiveOpts -J-XX:+UseSerialGC xcopy "C:\Program Files\StrategyQuant" "c:\temp\strategyquant-temp\2" /E /Y /EXCLUDE:exclusion.txt CD "c:\temp\strategyquant-temp\2" start /LOW StrategyQuant64.exe -J-server -J-Xmx2500m -J-XX:+DisableExplicitGC -J-XX:+AggressiveOpts -J-XX:+UseSerialGC xcopy "C:\Program Files\StrategyQuant" "c:\temp\strategyquant-temp\3" /E /Y /EXCLUDE:exclusion.txt CD "c:\temp\strategyquant-temp\3" start /LOW StrategyQuant64.exe -J-server -J-Xmx2500m -J-XX:+DisableExplicitGC -J-XX:+AggressiveOpts -J-XX:+UseSerialGC xcopy "C:\Program Files\StrategyQuant" "c:\temp\strategyquant-temp\4" /E /Y /EXCLUDE:exclusion.txt CD "c:\temp\strategyquant-temp\4" start /LOW StrategyQuant64.exe -J-server -J-Xmx2500m -J-XX:+DisableExplicitGC -J-XX:+AggressiveOpts -J-XX:+UseSerialGC
exclusion.txt contiene solo:
strategie
che escluderà la cartella /strategies come indicato.
Naturalmente è necessario regolare la quantità di RAM utilizzata per ogni istanza in base alla memoria del sistema. Il file batch può essere facilmente esteso nei punti necessari per utilizzare più o meno istanze. Ho file batch per 2-21 istanze.
Soglia
7 anni fa #137338
Credo che tu abbia 16 core reali / 32 thread. Ho la stessa macchina (due socket Xeon E5-2630), SQ non può utilizzare più di 4 core reali, quindi è possibile utilizzare 16 core reali ed eseguire 4 istanze SQ e lo caricherà 98%, ma è necessario ottimizzare il disco (SSD-PCI-X in RAID0 andrà bene).
Anche se si abilita il 32 su SQ non farà alcuna differenza rispetto a 4 thread. Ho effettuato test approfonditi su diverse macchine e queste sono le prestazioni ottimali; se si eseguono più istanze, queste lotteranno per il tempo della CPU e si formeranno lunghe code. Ma non ho controllato la quantità di strategie, parlo solo del carico della CPU e delle code. Se potete verificare per me l'effettiva velocità di generazione X strategie/minuto. Penso che potrebbe valere la pena di scartare l'accodamento della CPU.
Se eseguite questo test, mi sarete utili per fare lo stesso:
Test #1 Eseguire 1-2-3-4-x istanze SQ per caricare la CPU 100% e misurare quante generazioni ha creato (in questo caso utilizzare Random, in media sarà la stessa dimensione delle strategie.
Test #2 Eseguite 1-2-3-4-x + 1-2-3-4 altre istanze di SQ e misurate quante strategie vengono generate.
Spero che su quella macchina sia in funzione Server 2012 o almeno Windows 10.
In questo modo possiamo scoprire qual è l'optimum. Non ho applicato alcun hack e non è necessario, tutti i core reali sono caricati al massimo.
Aspetterò i vostri risultati e poi posterò i miei.
======
_Cujo
Usare il Cloud è uno spreco di soldi, non ti daranno mai dei core reali, ma delle schifose vCPU che sono 4-10 volte più lente dei core reali. Scegliete un server dedicato o comprate una macchina E5 decente.
No, ho un r810 con 4 socket (4x x7560)= 32 core, 64 thread. 128 GB di RAM, Windows Server 2008 Enterprise. Windows 10 non può utilizzare 4 socket e il sistema operativo non mi piace.
Soglia
7 anni fa #137373
Sembra che l'esecuzione di SQ oltre un certo numero di thread abbia un impatto negativo sulla velocità di generazione e la rallenti.
Ho testato 1 SQ con 64 thread per vedere cosa succede: La velocità di generazione passa dai normali 0,2 secondi per strategia a circa 5-10 secondi per strategia. Il carico della CPU si aggirava intorno a 1-3%.
statistica
7 anni fa #137379
Sembra che l'esecuzione di SQ oltre un certo numero di thread abbia un impatto negativo sulla velocità di generazione e la rallenti.
Ho testato 1 SQ con 64 thread per vedere cosa succede: La velocità di generazione passa dai normali 0,2 secondi per strategia a circa 5-10 secondi per strategia. Il carico della CPU si aggirava intorno a 1-3%.
Grazie per il test, che conferma il mio pensiero.
Il vero test sarà quello di:
1. Creare una cartella con 20000 strategie
2. Clonarlo (per evitare qualsiasi modifica da parte di SQ)
3. Carico (iniziare dall'abbuffata per evitare problemi di memoria / disco / CPU) carico pulito
4. Esecuzione del test per 20 anni su M1 - tempo record
5. Pulire tutto, chiudere
6. Passare alla fase #3, confrontare i risultati (ripetere #3 per ogni combinazione, con Thread, senza Hyper threading e solo Core, ecc.)
è nella mia lista di cose da fare, ma se qualcuno può eseguire questo test e mostrare i risultati, sarebbe utile.
Soglia
7 anni fa #137390
@echo off rmdir "C:\Program Files\StrategyQuant\temp" /S /Q rmdir "C:\Program Files\StrategyQuant\log" /S /Q rmdir "c:\temp\strategyquant-temp" /S /Q mkdir "c:\temp\strategyquant-temp" mkdir "c:\temp\strategyquant-temp\1" mkdir "c:\temp\code(01)02" mkdir "c:\temp\code(01)02" mkdir "c:\temp\code(0144)/strategyquant-temp\4" compact /c /s: "c:\temp\code(01)01" compact /c /s: "c:\temp\strategyquant-temp\2" compact /c /s: "c:\temp\strategyquant-temp\3" compatto /c /s: "c:\temp\i}strategiaquantitativa-temp\4" c: xcopia "C:\Program Files\StrategyQuant" "c:\temp\strategyquant-temp\1" /E /Y /EXCLUDE:exclusion.txt CD "c:\temp\strategyquant-temp\1" start /LOW StrategyQuant64.exe -J-server -J-Xmx2500m -J-XX:+DisableExplicitGC -J-XX:+AggressiveOpts -J-XX:+UseSerialGC xcopy "C:\Program Files\StrategyQuant" "c:\temp\strategyquant-temp\2" /E /Y /EXCLUDE:exclusion.txt CD "c:\temp\strategyquant-temp\2" start /LOW StrategyQuant64.exe -J-server -J-Xmx2500m -J-XX:+DisableExplicitGC -J-XX:+AggressiveOpts -J-XX:+UseSerialGC xcopy "C:\Program Files\StrategyQuant" "c:\temp\strategyquant-temp\3" /E /Y /EXCLUDE:exclusion.txt CD "c:\temp\strategyquant-temp\3" start /LOW StrategyQuant64.exe -J-server -J-Xmx2500m -J-XX:+DisableExplicitGC -J-XX:+AggressiveOpts -J-XX:+UseSerialGC xcopy "C:\Program Files\StrategyQuant" "c:\temp\strategyquant-temp\4" /E /Y /EXCLUDE:exclusion.txt CD "c:\temp\strategyquant-temp\4" start /LOW StrategyQuant64.exe -J-server -J-Xmx2500m -J-XX:+DisableExplicitGC -J-XX:+AggressiveOpts -J-XX:+UseSerialGC
Ritenete che sia molto più veloce rispetto al caricamento di un file di impostazioni "master" in ciascuno di essi o che sia semplicemente meno problematico?
Evitare il mal di testa probabilmente ne vale la pena da solo.
geektrader
7 anni fa #137394
Sì, voglio che tutto sia corretto e aggiornato per ogni istanza, soprattutto perché non voglio aggiornare i dati su 28 coppie ogni settimana su X istanze. Inoltre, i file batch hanno un alligment della RAM preconfigurato per il mio sistema e la quantità di istanze che vengono eseguite ogni volta. Quindi so che è sempre corretto. Spesso eseguo 16 istanze contemporaneamente, ad esempio, e diventa fastidioso caricare il file impostato in ognuna di esse. Con un SSD + eBoostr, tutto il lancio tramite i file .bat richiede a malapena 3 minuti o meno.
Soglia
7 anni fa #137397
L'ho fatto funzionare ieri sera, è decisamente migliore.
Ho creato una copia separata della cartella "master bin". Prima di eseguire il batch ho cancellato dalla cartella bin tutti i dati storici che non avrei utilizzato. Sono stati copiati molti meno giga.
Soglia
7 anni fa #137398
Utilizzo medio di circa 80-85%. 32SQ con 2 thread ciascuno. 64SQ con 1 thread ciascuno sarebbero stati troppo impegnativi.