Узнайте время процессора и использование памяти для работы с грязью
Я предполагаю, что это довольно тривиальный вопрос, но, тем не менее, я ищу (сакрально, я полагаю) команду, которая будет отображать процессорное время и память, используемую идентификатором задания slurm.
7 ответов
Вы правы в том, что священная команда - это то, что вы ищете. Переключатель --format является другим ключевым элементом. Если вы запустите эту команду:
sacct -e
вы получите распечатку различных полей, которые можно использовать для ключа --format. Подробная информация о каждом поле описана в разделе "Поля учетной записи" справочной страницы. Что касается времени процессора и памяти, CPUTime и MaxRSS, вероятно, то, что вы ищете. cputimeraw также можно использовать, если вы хотите число в секундах, в отличие от обычного формата времени Slurm.
sacct --format="CPUTime,MaxRSS"
Другой отвечает на все форматы детализации для вывода sacct
, который отлично подходит для просмотра нескольких заданий, агрегированных в таблице.
Однако иногда вы хотите рассмотреть конкретную работу более подробно, чтобы вы могли определить, эффективно ли ваша работа использовала выделенные ресурсы. Для этого, seff
это очень полезно. Синтаксис просто seff <Jobid>
, Например, вот моя недавняя работа (которая провалилась):
$ seff 15780625
Job ID: 15780625
Cluster: mycluster
User/Group: myuser/mygroup
State: OUT_OF_MEMORY (exit code 0)
Nodes: 1
Cores per node: 16
CPU Utilized: 12:06:01
CPU Efficiency: 85.35% of 14:10:40 core-walltime
Job Wall-clock time: 00:53:10
Memory Utilized: 1.41 GB
Memory Efficiency: 70.47% of 2.00 GB
Обратите внимание, что ключевая метрика ЦП, CPU Utilized, соответствует полю TotalCPU из sacct
, в то время как используемая память соответствует MaxRSS.
sacct
действительно команда, используемая для готовых заданий. Для запуска рабочих мест, вы можете посмотреть на sstat
команда.
@aaron.kizmiller прав, sacct
это команда для использования.
Можно получить все следующие поля, передав их в saact --format="field,field"
Поля:
Account AdminComment AllocCPUS AllocGRES
AllocNodes AllocTRES AssocID AveCPU
AveCPUFreq AveDiskRead AveDiskWrite AvePages
AveRSS AveVMSize BlockID Cluster
Comment ConsumedEnergy ConsumedEnergyRaw CPUTime
CPUTimeRAW DerivedExitCode Elapsed ElapsedRaw
Eligible End ExitCode GID
Group JobID JobIDRaw JobName
Layout MaxDiskRead MaxDiskReadNode MaxDiskReadTask
MaxDiskWrite MaxDiskWriteNode MaxDiskWriteTask MaxPages
MaxPagesNode MaxPagesTask MaxRSS MaxRSSNode
MaxRSSTask MaxVMSize MaxVMSizeNode MaxVMSizeTask
McsLabel MinCPU MinCPUNode MinCPUTask
NCPUS NNodes NodeList NTasks
Priority Partition QOS QOSRAW
ReqCPUFreq ReqCPUFreqMin ReqCPUFreqMax ReqCPUFreqGov
ReqCPUS ReqGRES ReqMem ReqNodes
ReqTRES Reservation ReservationId Reserved
ResvCPU ResvCPURAW Start State
Submit Suspended SystemCPU Timelimit
TotalCPU UID User UserCPU
WCKey WCKeyID WorkDir
Например, чтобы вывести список всех идентификаторов заданий, прошедшего времени и максимального размера виртуальной машины, вы можете запустить:
sacct --format='JobID,Elapsed,MaxVMSize'
Вы можете экспортировать
SACCT_FORMAT
и просто введите
sacct
каждый раз.
$ export SACCT_FORMAT="JobID%20,JobName,User,Partition,NodeList,Elapsed,CPUTime,State,AllocTRES%32"
$ sacct
JobID JobName User Partition NodeList Elapsed CPUTime State AllocTRES
-------------------- ---------- --------- ---------- --------------- ---------- ---------- ---------- --------------------------------
249527_4 xgb_tune zhaoqi cn cn12 00:26:50 1-11:46:40 RUNNING billing=80,cpu=80,mem=100G,node+
249527_1 xgb_tune zhaoqi cn cn09 00:26:50 1-11:46:40 RUNNING billing=80,cpu=80,mem=100G,node+
249527_2 xgb_tune zhaoqi cn cn10 00:26:50 1-11:46:40 RUNNING billing=80,cpu=80,mem=100G,node+
249527_3 xgb_tune zhaoqi cn cn11 00:26:50 1-11:46:40 RUNNING billing=80,cpu=80,mem=100G,node+
ссылка: https://docs.ycrc.yale.edu/clusters-at-yale/job-scheduling/resource-usage/
Хотя фантастические решения уже существуют, я разделяю другую точку зрения.
Этот метод позволяет осуществлять мониторинг множества узлов в реальном времени.
Мы можем написать сценарий monitor.sh
чтобы получить статистику (например, память), затем записать ее в файл.
#! /bin/sh
if [ -f "./free.log_"`hostname` ];then
echo "file existed , now deleting it !"
rm ./free.log_`hostname`
fi
echo "start recording!"
while true
do
echo "******["`date +%Y-%m-%d_%H:%M:%S`"]******" >> free.log_`hostname`
free -s 1 -c 2 -h|sed -n 1,2p >> free.log_`hostname`
done
Затем напишите сценарий своей работы sbatch_input.sh
, который может быть вызван sbatch.
#! /bin/sh
#SBATCH -N 2
#SBATCH -p cnall
srun hostname
srun ./monitor.sh
Вызов сценария
sbatch ./sbatch_input.sh
Мы можем видеть какой-то журнал.
sacct -a -j <job_id> --format=user%10,jobname%10,node%10,start%10,end%10,elapsed%10,MaxRS
используйте команду
sacct
чтобы получить доступ к истории завершенных работ slurm
за
<job_id>
, тогда это относится к идентификатору задания slurm, это
--format=
указать различные детали для отображения, в каком формате:
- в
user
: пользователь запускает задание - в
jobname
: имя задания или процесса - в
node
: это, чтобы указать, на какой машине была выполнена работа - в
start
а такжеend
последовательно указывают даты начала и окончания работы - за
elapsed
речь идет о времени выполнения задания или процесса, - а также
MaxRS
для максимального процессора, используемого для выполнения работы - за
%
он используется для определения того, сколько символов необходимо выделить для печати данной информации (например, имя задания% 25: имя задания будет отображаться в 25 символах)