์น์ ํ๋ ์ฌ๋ฌ๋ถ, ์ด ์ข์ ๋๊ตฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ ๋ง ๊ฐ์ฌํฉ๋๋ค.
๋ค๋ฅธ ๊ณณ์์ ๋ต์ ์ฐพ์ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ ๋น์ ์๊ฒ ๋ด ์์ฌ์ ์ ๊ธฐํฉ๋๋ค.
์ ๋ ์ฝ 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
ํ๋ฉด
๊ด์ฌ์ ๊ฐ์ ธ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!!
๊ทธ๋ฌ๋ 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