NVIDIA GPU ํตํฉ์ ํตํด GPU ์ํ๋ฅผ ๋ชจ๋ํฐ๋งํ ์ ์์ต๋๋ค. ์ด ํตํฉ์์๋ NVIDIA์ SMI ์ ํธ๋ฆฌํฐ์ ์ก์ธ์คํ ์ ์๋ Flex ํตํฉ๊ณผ ํจ๊ป ์ธํ๋ผ ์์ด์ ํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
NVIDIA GPU ํตํฉ์ ์ค์ ํ๋ฉด GPU ์งํ์ ๋ํ ๋์๋ณด๋๊ฐ ์ ๊ณต๋ฉ๋๋ค.
์ค์นํ๋ฉด ์ค์ํ GPU ์งํ๊ฐ ํฌํจ๋ ์ฌ์ ๊ตฌ์ถ๋ ๋์๋ณด๋๊ฐ ์ ๊ณต๋ฉ๋๋ค.
- GPU ํ์ฉ๋
- ECC ์ค๋ฅ ์
- ํ์ฑ ์ปดํจํ ํ๋ก์ธ์ค
- ์๊ณ ๋ฐ ์ฑ๋ฅ ์ํ
- ์จ๋ ๋ฐ ํฌ ์๋
- ์ง์๋๋ ๊ฐ ์ฅ์น์ ๋ํ ๋์ ๋ฐ ์ ์ ์ ๋ณด
์ธํ๋ผ ์์ด์ ํธ ์ค์น
New Relic์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์บก์ฒํ๋ ค๋ฉด ์ธํ๋ผ ์์ด์ ํธ๋ฅผ ์ค์นํ์ธ์. ๋น์ฌ์ ์ธํ๋ผ ์์ด์ ํธ๋ GPU ์ฑ๋ฅ์ ์ถ์ ํ ์ ์๋๋ก ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ ์์งํฉ๋๋ค.
๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์ธํ๋ผ ์์ด์ ํธ๋ฅผ ์ค์นํ ์ ์์ต๋๋ค.
- ๊ฐ์ด๋ ์ค์น ๋ ์์คํ ์ ๊ฒ์ฌํ๊ณ ์์คํ ์ ๊ฐ์ฅ ์ ํฉํ ์ ํ๋ฆฌ์ผ์ด์ ๋ชจ๋ํฐ๋ง ์์ด์ ํธ์ ํจ๊ป ์ธํ๋ผ ์์ด์ ํธ๋ฅผ ์ค์นํ๋ CLI ๋๊ตฌ์ ๋๋ค. ๊ฐ์ด๋ ์ค์น ์๋ ๋ฐฉ์์ ๋ํด ์์ธํ ์์๋ณด๋ ค๋ฉด ๊ฐ์ด๋ ์ค์น ๊ฐ์ ๋ฅผ ํ์ธํ์ธ์.
- ์ธํ๋ผ ์์ด์ ํธ๋ฅผ ์๋์ผ๋ก ์ค์นํ๋ ค๋ ๊ฒฝ์ฐ Linux, Windows ์ฉ ์๋ ์ค์น ์์ต์๋ฅผ ๋ฐ๋ฅผ ์ ์์ต๋๋ค.
NVIDIA GPU์ฉ Flex ํตํฉ ๊ตฌ์ฑ
Flex๋ New Relic ์ธํ๋ผ ์์ด์ ํธ์ ํจ๊ป ๋ฒ๋ค๋ก ์ ๊ณต๋๋ฉฐ NVIDIA GPU ์ฅ์น๋ฅผ ๋ชจ๋ํฐ๋งํ๋ ๋ช ๋ น์ค ์ ํธ๋ฆฌํฐ์ธ NVIDIA SMI ์ ํตํฉ๋ ์ ์์ต๋๋ค.
์ค์
nvidia-smi๋ Linux ๋ฐ Windows Server์ NVIDIA GPU ๋์คํ๋ ์ด ๋๋ผ์ด๋ฒ๊ฐ ์ฌ์ ์ค์น๋์ด ์ ๊ณต๋ฉ๋๋ค.
Flex๋ฅผ ๊ตฌ์ฑํ๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ธ์.
- ๋ค์ ๊ฒฝ๋ก์
nvidia-smi-gpu-monitoring.yml
์ด๋ผ๋ ํ์ผ์ ๋ง๋ญ๋๋ค.
$sudo touch /etc/newrelic-infra/integrations.d/nvidia-smi-gpu-monitoring.yml
git ์ ์ฅ์ ์์ ๋ค์ด๋ก๋ํ ์๋ ์์ต๋๋ค.
- ํตํฉ ๊ตฌ์ฑ์ผ๋ก
nvidia-smi-gpu-monitoring.yml
ํ์ผ์ ์ ๋ฐ์ดํธํฉ๋๋ค.
--- integrations: - name: nri-flex # interval: 30s config: name: NvidiaSMI variable_store: metrics: "name,driver_version,count,serial,pci.bus_id,pci.domain,pci.bus,\ pci.device_id,pci.sub_device_id,pcie.link.gen.current,pcie.link.gen.max,\ pcie.link.width.current,pcie.link.width.max,index,display_mode,display_active,\ persistence_mode,accounting.mode,accounting.buffer_size,driver_model.current,\ driver_model.pending,vbios_version,inforom.img,inforom.oem,inforom.ecc,inforom.pwr,\ gom.current,gom.pending,fan.speed,pstate,clocks_throttle_reasons.supported,\ clocks_throttle_reasons.gpu_idle,clocks_throttle_reasons.applications_clocks_setting,\ clocks_throttle_reasons.sw_power_cap,clocks_throttle_reasons.hw_slowdown,clocks_throttle_reasons.hw_thermal_slowdown,\ clocks_throttle_reasons.hw_power_brake_slowdown,clocks_throttle_reasons.sw_thermal_slowdown,\ clocks_throttle_reasons.sync_boost,memory.total,memory.used,memory.free,compute_mode,\ utilization.gpu,utilization.memory,encoder.stats.sessionCount,encoder.stats.averageFps,\ encoder.stats.averageLatency,ecc.mode.current,ecc.mode.pending,ecc.errors.corrected.volatile.device_memory,\ ecc.errors.corrected.volatile.dram,ecc.errors.corrected.volatile.register_file,ecc.errors.corrected.volatile.l1_cache,\ ecc.errors.corrected.volatile.l2_cache,ecc.errors.corrected.volatile.texture_memory,ecc.errors.corrected.volatile.cbu,\ ecc.errors.corrected.volatile.sram,ecc.errors.corrected.volatile.total,ecc.errors.corrected.aggregate.device_memory,\ ecc.errors.corrected.aggregate.dram,ecc.errors.corrected.aggregate.register_file,ecc.errors.corrected.aggregate.l1_cache,\ ecc.errors.corrected.aggregate.l2_cache,ecc.errors.corrected.aggregate.texture_memory,ecc.errors.corrected.aggregate.cbu,\ ecc.errors.corrected.aggregate.sram,ecc.errors.corrected.aggregate.total,ecc.errors.uncorrected.volatile.device_memory,\ ecc.errors.uncorrected.volatile.dram,ecc.errors.uncorrected.volatile.register_file,ecc.errors.uncorrected.volatile.l1_cache,\ ecc.errors.uncorrected.volatile.l2_cache,ecc.errors.uncorrected.volatile.texture_memory,ecc.errors.uncorrected.volatile.cbu,\ ecc.errors.uncorrected.volatile.sram,ecc.errors.uncorrected.volatile.total,ecc.errors.uncorrected.aggregate.device_memory,\ ecc.errors.uncorrected.aggregate.dram,ecc.errors.uncorrected.aggregate.register_file,ecc.errors.uncorrected.aggregate.l1_cache,\ ecc.errors.uncorrected.aggregate.l2_cache,ecc.errors.uncorrected.aggregate.texture_memory,ecc.errors.uncorrected.aggregate.cbu,\ ecc.errors.uncorrected.aggregate.sram,ecc.errors.uncorrected.aggregate.total,retired_pages.single_bit_ecc.count,\ retired_pages.double_bit.count,retired_pages.pending,temperature.gpu,temperature.memory,power.management,power.draw,\ power.limit,enforced.power.limit,power.default_limit,power.min_limit,power.max_limit,clocks.current.graphics,clocks.current.sm,\ clocks.current.memory,clocks.current.video,clocks.applications.graphics,clocks.applications.memory,\ clocks.default_applications.graphics,clocks.default_applications.memory,clocks.max.graphics,clocks.max.sm,clocks.max.memory,\ mig.mode.current,mig.mode.pending" apis: - name: NvidiaGpu commands: - run: nvidia-smi --query-gpu=${var:metrics} --format=csv # update this if you have an alternate path output: csv rename_keys: " ": "" "\\[MiB\\]": ".MiB" "\\[%\\]": ".percent" "\\[W\\]": ".watts" "\\[MHz\\]": ".MHz" value_parser: "clocks|power|fan|memory|temp|util|ecc|stats|gom|mig|count|pcie": '\d*\.?\d+' '.': '\[N\/A\]|N\/A|Not Active|Disabled|Enabled|Default'
GPU ์ธก์ ํญ๋ชฉ์ด ์์ง๋๊ณ ์๋์ง ํ์ธ
Flex ๊ตฌ์ฑ์ ์ธํ๋ผ ์์ด์ ํธ์ ์ํด ์๋์ผ๋ก ๊ฐ์ง๋๊ณ ์คํ๋๋ฏ๋ก ์์ด์ ํธ๋ฅผ ๋ค์ ์์ํ ํ์๊ฐ ์์ต๋๋ค. ๋ค์ NRQL ์ฟผ๋ฆฌ๋ฅผ ์คํํ์ฌ ์ธก์ ํญ๋ชฉ์ด ์์ง๋๊ณ ์๋์ง ํ์ธํ ์ ์์ต๋๋ค.
SELECT * FROM NvidiaGpuSample
์ ํ๋ฆฌ์ผ์ด์ ๋ชจ๋ํฐ๋ง
์ฌ์ ๊ตฌ์ถ๋ ๋์๋ณด๋ ํ ํ๋ฆฟ์ ์ฌ์ฉํ์ฌ GPU ์งํ๋ฅผ ๋ชจ๋ํฐ๋งํ ์ ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ดํ์ธ์:
์ผ๋ก ์ด๋ํ์ฌ
Dashboards
๋ฅผ) ํด๋ฆญํฉ๋๋ค.
Import dashboard
ํญ์ ํด๋ฆญํฉ๋๋ค.
NVIDIA GPU ๋์๋ณด๋ ์์ ํ์ผ ์ฝํ ์ธ (
.json
)๋ฅผ ๋ณต์ฌํฉ๋๋ค.๋์๋ณด๋๋ฅผ ๊ฐ์ ธ์์ผ ํ๋ ๋์ ๊ณ์ ์ ์ ํํฉ๋๋ค.
์์ ์ ํ์ธํ๋ ค๋ฉด
Import dashboard
ํด๋ฆญํ์ธ์.
๊ทํ์
NVIDIA GPU Monitoring
๋์๋ณด๋๋ ๋ง์ถคํ ๋์๋ณด๋๋ก ๊ฐ์ฃผ๋๋ฉฐ Dashboards UI์์ ์ฐพ์ ์ ์์ต๋๋ค. ๋์๋ณด๋ ์ฌ์ฉ ๋ฐ ํธ์ง์ ๋ํ ๋ฌธ์๋ ๋์๋ณด๋ ๋ฌธ์ ๋ฅผ ์ฐธ์กฐํ์ธ์.๋ค์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ์๊ฒฉ ๋ถ์์ ๋ณด๊ธฐ ์ํ NRQL ์ฟผ๋ฆฌ์ ๋๋ค.
SELECT * FROM NvidiaGpuSample
๋ค์์ ๋ญ์ง?
NVIDIA SMI ์ ํธ๋ฆฌํฐ์์ ์ฌ์ฉํ ์ ์๋ ์ ๋ณด๋ฅผ ํฌํจํ๊ฑฐ๋ ์ ์ธํ๋๋ก Flex ๊ตฌ์ฑ์ ์กฐ์ ํ ์ ์์ต๋๋ค.
NRQL ์ฟผ๋ฆฌ ์์ฑ ๋ฐ ๋์๋ณด๋ ์์ฑ์ ๋ํด ์์ธํ ์์๋ณด๋ ค๋ฉด ๋ค์ ๋ฌธ์๋ฅผ ํ์ธํ์ธ์.
๊ธฐ๋ณธ ๋ฐ ๊ณ ๊ธ ์ฟผ๋ฆฌ๋ฅผ ์์ฑ ํ๊ธฐ ์ํ ์ฟผ๋ฆฌ ๋น๋ ์๊ฐ
๋์๋ณด๋๋ฅผ ์ฌ์ฉ์ ์ง์ ํ๊ณ ๋ค์ํ ์์ ์ ์ํํ๊ธฐ ์ํ ๋์๋ณด๋ ์๊ฐ
๋์คํ๋ ์ด ๋ชจ๋๋ฅผ ์กฐ์ ํ๊ฑฐ๋ ๋์๋ณด๋์ ๋ ๋ง์ ์ฝํ ์ธ ๋ฅผ ์ถ๊ฐํ์ธ์.