Pyradiomics: ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ๊ฐ€ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Œ

์— ๋งŒ๋“  2020๋…„ 01์›” 04์ผ  ยท  7์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: AIM-Harvard/pyradiomics

์นœ์• ํ•˜๋Š” ์—ฌ๋Ÿฌ๋ถ„, ์ด ์ข‹์€ ๋„๊ตฌ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๊ณณ์—์„œ ๋‹ต์„ ์ฐพ์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜๋Š” ๋‹น์‹ ์—๊ฒŒ ๋‚ด ์˜์‹ฌ์„ ์ œ๊ธฐํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” ์•ฝ 400๊ฐœ์˜ ์ด๋ฏธ์ง€+๋งˆ์Šคํฌ ์ฝค๋ณด ๋ฐฐ์น˜(csv ํŒŒ์ผ)๋กœ ์ž‘์—…ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๊ณ„์‚ฐ์„ ์œ„ํ•ด ์ž‘์€ ์ปดํ“จํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์•ฝ 50 binWidth/binCounts๋ฅผ ์Šค์บ”ํ•˜๊ณ  ์‹ถ๊ธฐ ๋•Œ๋ฌธ์— ์ถ”์ถœ์„ ๋ณ‘๋ ฌ๋กœ ์ตœ์ ํ™”ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

ํŠนํžˆ ๋‹ค๋ฅธ ๊ตฌ์„ฑ์„ ์Šค์บ”ํ•˜๋Š” bash ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  -j 24 ๋งค๊ฐœ๋ณ€์ˆ˜(24๋ช…์˜ ์ž‘์—…์ž์šฉ)๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. 2x Xeon 6Core HT(์ด ๋…ผ๋ฆฌ ์ฝ”์–ด = 24)์™€ ์•ฝ 200GB์˜ RAM์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ CPU๊ฐ€ 100%๋กœ ์ž‘๋™ํ•˜๋Š” ์‹œ๊ฐ„์€ ๊ทนํžˆ ์ผ๋ถ€์— ๋ถˆ๊ณผํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค... ์ •์ƒ์ž…๋‹ˆ๊นŒ? ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋Š” ์ผ๋ถ€ ์Šคํฌ๋ฆฝํŠธ์˜ ์‚ฌ์šฉ์— ๋ณ‘๋ชฉ ํ˜„์ƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋ถ„๋ช…ํžˆ ๋‚˜๋Š” โ€‹โ€‹๋ณ‘๋ ฌ์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๊ณ„์‚ฐ์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ฒซ ๋ฒˆ์งธ ๋ฐฐ์น˜๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๋งŒ ๋‹ค์Œ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๊ณ„์‚ฐ์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ์‹œ:

bC="8 12 16 22 32 64 43 128 171 256 341 512 682 1024"
for i in $bC
do
  pyradiomics ./input/input_dyn.csv --param ./json/RadiomicsLogicParams_all.json --setting 
  "binCount:${i}" --setting "normalize:false" -o ./output/all_stackedOut.csv -f csv -j 24 -v 4
done

ํ™”๋ฉด
Screenshot 2020-01-04 at 13 20 14

๊ด€์‹ฌ์„ ๊ฐ€์ ธ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!!

๋ชจ๋“  7 ๋Œ“๊ธ€

๊ทธ๋Ÿฌ๋‚˜ CPU๊ฐ€ 100%๋กœ ์ž‘๋™ํ•˜๋Š” ์‹œ๊ฐ„์€ ๊ทนํžˆ ์ผ๋ถ€์— ๋ถˆ๊ณผํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค... ์ •์ƒ์ž…๋‹ˆ๊นŒ? ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋Š” ์ผ๋ถ€ ์Šคํฌ๋ฆฝํŠธ์˜ ์‚ฌ์šฉ์— ๋ณ‘๋ชฉ ํ˜„์ƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋„ค, ์ •์ƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ PyRadiomics์™€ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค.

๋„ค, ์ •์ƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ PyRadiomics์™€ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค.

๋น„๋ฐ€์Šค๋Ÿฌ์šด ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ด์œ ๊ฐ€ ์žˆ๋‚˜์š”?
ํ”ํ•œ๊ฐ€์š”?

์ด ์„ธ ๊ฐ€์ง€ ์งˆ๋ฌธ์— ๋ชจ๋‘ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ๋น„๋ฐ€์„ ์œ„ํ•ด?

์šฐ๋ถ„ํˆฌ 19.4๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. OS์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ด ๊ฒฝ์šฐ ์Šค๋ ˆ๋“œ๋ฅผ ๋‹ซ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋น„ํ™œ์„ฑํ™”ํ•  ์ ˆ์ „ ์„ค์ •์„ ์ฐพ๊ธฐ ์œ„ํ•ด UEFI๋ฅผ ์ด๋ฏธ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค....

๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ƒˆํ•ด ๋ณต ๋งŽ์ด ๋ฐ›์œผ์„ธ์š”.

CPU ๋ฐ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ์„œ๋กœ๋ฅผ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— 100% CPU ์ฝ”์–ด ์‚ฌ์šฉ๋ฅ ์€ ์ผ๋ฐ˜์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹จ์ผ ์ฝ”์–ด ์‹œ์Šคํ…œ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ฝ”๋“œ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์•ก์„ธ์Šค, ๋„คํŠธ์›Œํฌ ๋“ฑ์„ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜๊ตฌ์ ์ธ 100%์— ๋„๋‹ฌํ•˜์ง€ ๋ชปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํŒŒ์ด์ฌ ์Šคํฌ๋ฆฝํŠธ์˜ ๊ฒฝ์šฐ ์ฝ”์–ด๋Š” ์•„๋งˆ๋„ ๋‹ค์Œ์„ ํ†ตํ•ด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋กœ ์Šค์™‘๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ปค๋„(๋˜๋Š” ํ™”๋ฉด์ด ์ •์ง€๋˜๋Š” ๋“ฑ).

์š”์•ฝํ•˜๋ฉด, 100% ํ™œ์šฉ๋„๊ฐ€ ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•ด์„œ ์ฝ”๋“œ๊ฐ€ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์˜๋ฏธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ์ฝ”๋“œ ๋ฐ ๋ฌธ์ œ์— ๋”ฐ๋ผ ๋ณ‘๋ ฌํ™” ์ด์ ์ด ์Šค๋ ˆ๋“œ ์ˆ˜์™€ ์„ ํ˜• ๊ด€๊ณ„๋ฅผ ๊ฐ–๋Š” ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋‹น์‹ ์€ ๋‚ด๊ฐ€ -j 1๋กœ 24๊ฐœ์˜ ๋‹ค๋ฅธ pyradiomics ์ธ์Šคํ„ด์Šค๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ์–ป์„ ๊ฒƒ์ด๋ผ๊ณ  ๋งํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๊นŒ?
๋‚˜๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์ฝ๊ธฐ/์“ฐ๊ธฐ ๋˜๋Š” ๋‹ค๋ฅธ ๊ฒƒ์— ๋Œ€ํ•œ ๋””์Šคํฌ ์•ก์„ธ์Šค์™€ ๊ด€๋ จ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ตญ ๋‚˜๋Š” CPU๊ฐ€ 70% ์•„๋ž˜๋กœ ๋–จ์–ด์งˆ ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ํ”ผ๋ผ๋ฏธ๋“œํ˜• ์ถ”์ถœ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜๋™ ๊ฒ€์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
์ด์ œ ๋‚˜๋Š” ํ•ญ์ƒ ํ•ฉ๋ฆฌ์ ์ธ CPU ์‚ฌ์šฉ๋ฅ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(๋ชจ๋“  ๋…ผ๋ฆฌ ๋‹จ์œ„์—์„œ >50%, ์ฆ‰ ํ•ญ์ƒ 100% ์‚ฌ์šฉ๋ฅ )

wait4CpuReady () {
  cpuUsed=5 #debouncer
  while  [ ${cpuUsed} -gt 0 ] || [ $(top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}') -ge 70 ]
  do
    sleep 5
    if [ ${cpuUsed} -gt 0 ] && [ $(top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}') -ge 70 ]
    then
      cpuUsed=5
    else
      ((cpuUsed--))
      echo "CPU not used, debouncer = ${cpuUsed}"
    fi
  done
}

bW="$(seq -s ' ' 1 1 9) $(seq -s ' ' 10 2 28) $(seq -s ' ' 30 3 60)"


for i in $bW
do
  wait4CpuReady

  echo -e "\e[41m#########################################################################################\e[0m"
  echo -e "\e[41m#### Starting computing all features for all_times and SUB - NONnorm and binWidth $i ####\e[0m"
  echo -e "\e[41m#########################################################################################\e[0m"

  pyradiomics ./input/input_all_msub.csv --param ./json/RadiomicsLogicParams_all_noWarningGLCM.json --setting "binWidth:${i}.0" --setting "normalize:false" -o ./output/manualOut/all_allTmSub_stackedOut_bw${i}.csv -f csv -j 3 -v 4 &
done

Screenshot 2020-01-05 at 21 12 25

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰