{"id":478706,"date":"2026-05-06T01:40:53","date_gmt":"2026-05-06T01:40:53","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=478706"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=478706","title":{"rendered":"DGX Spark: \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 unified memory, \u043a\u043e\u0433\u0434\u0430 NVML \u0438 dcgm\u2011exporter \u043c\u043e\u043b\u0447\u0430\u0442"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><em>\u0421\u0432\u0435\u0436\u0435\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u043d\u0430\u00a0DGX Spark. \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u044e NVIDIA\u2011\u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0432\u00a0Grafana\u00a0\u2014 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 memory\u2011\u043f\u0430\u043d\u0435\u043b\u0435\u0439 \u043f\u0443\u0441\u0442\u044b\u0435, \u043f\u0440\u044f\u043c\u044b\u0435\u00a0\u043b\u0438\u043d\u0438\u0438 \u043f\u043e\u00a0\u043d\u0443\u043b\u044e. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u00a0\u0447\u0442\u043e\u2011\u0442\u043e \u043d\u0435\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b. \u0427\u0435\u0440\u0435\u0437 \u043f\u043e\u043b\u0447\u0430\u0441\u0430 \u0434\u043e\u0445\u043e\u0434\u0438\u0442: \u044d\u0442\u043e \u043d\u0435\u00a0\u0443\u00a0\u043c\u0435\u043d\u044f \u0441\u043b\u043e\u043c\u0430\u043b\u043e\u0441\u044c, \u044d\u0442\u043e NVML \u043d\u0430\u00a0GB10\u00a0\u0442\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/em><\/p>\n<p><em>\u042d\u0442\u043e \u0442\u0430 \u043e\u0431\u043b\u0430\u0441\u0442\u044c, \u0433\u0434\u0435 \u043d\u0430\u00a0GB10\u00a0\u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e observability\u2011\u0441\u0442\u0435\u043a\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442: NVML \u043e\u0442\u0434\u0430\u0451\u0442 <\/em><code><em>[N\/A]<\/em><\/code><em> \u043d\u0430\u00a0memory.used \u0438 memory.total, dcgm\u2011exporter \u043d\u0435\u00a0\u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f, nvtop \u0432\u00a0memory\u2011\u043a\u043e\u043b\u043e\u043d\u043a\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0443\u0441\u0442\u043e\u0442\u0443. \u0412\u00a0Grafana NVIDIA\u2011\u0434\u0430\u0448\u0431\u043e\u0440\u0434\u044b \u043f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0442\u0430\u043a, \u0431\u0443\u0434\u0442\u043e GPU \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435\u0442\u00a0\u2014 \u0438 \u044d\u0442\u043e \u043d\u0435\u00a0\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0Grafana \u043f\u0440\u0438\u00a0\u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435\u00a0\u043a\u0440\u0438\u0447\u0438\u0442, \u0430\u00a0\u043c\u043e\u043b\u0447\u0430 \u0440\u0438\u0441\u0443\u0435\u0442 \u0440\u043e\u0432\u043d\u0443\u044e\u00a0\u043b\u0438\u043d\u0438\u044e \u043f\u043e\u00a0\u043d\u0443\u043b\u044e.<\/em><\/p>\n<p><em>\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f\u00a0\u2014 \u043f\u0440\u043e\u00a0\u0442\u043e, \u043a\u0430\u043a\u00a0\u044f \u044d\u0442\u043e \u043c\u0435\u0441\u0442\u043e \u043e\u0431\u043e\u0448\u0451\u043b \u0438 \u0447\u0442\u043e\u00a0\u0432\u00a0\u0438\u0442\u043e\u0433\u0435 \u0443\u0432\u0438\u0434\u0435\u043b \u0432\u00a0Grafana. \u0422\u0440\u0451\u0445\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0430\u044f \u0441\u0445\u0435\u043c\u0430: textfile collector \u0434\u043b\u044f\u00a0\u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043c\u0435\u0442\u0440\u0438\u043a, per\u2011container attribution \u0447\u0435\u0440\u0435\u0437 <\/em><code><em>docker top<\/em><\/code><em> + <\/em><code><em>nvidia-smi<\/em><\/code><em>, \u0438 CLI\u2011\u0444\u043e\u043b\u043b\u0431\u044d\u043a \u043d\u0430 <\/em><code><em>\/proc\/meminfo<\/em><\/code><em>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u00a0Spark, \u043d\u043e\u00a0\u0438 \u043d\u0430\u00a0\u0434\u0440\u0443\u0433\u0438\u0445 Linux\u2011\u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u0441\u00a0\u0435\u0434\u0438\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e (unified memory)\u00a0\u2014 AMD Strix Halo \u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435.<\/em><\/p>\n<p>\u0412\u00a0\u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0443:<\/p>\n<ul>\n<li>\n<p>\u043f\u043e\u0447\u0435\u043c\u0443 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043b\u043e\u043c\u0430\u044e\u0442\u0441\u044f \u043d\u0430\u00a0GB10;<\/p>\n<\/li>\n<li>\n<p>\u043a\u0430\u043a\u00a0\u0443\u0441\u0442\u0440\u043e\u0435\u043d collector \u043d\u0430 65\u00a0\u0441\u0442\u0440\u043e\u043a bash \u0438 \u043a\u0430\u043a\u0438\u0435 \u0442\u0440\u0438 \u043d\u0435\u00a0\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432\u00a0\u043d\u0451\u043c \u0441\u0438\u0434\u044f\u0442;<\/p>\n<\/li>\n<li>\n<p>\u043a\u0430\u043a\u00a0\u0434\u0435\u043b\u0430\u0442\u044c per\u2011container attribution GPU\u2011\u043f\u0430\u043c\u044f\u0442\u0438, \u043a\u043e\u0433\u0434\u0430 NVML \u0441\u043b\u0435\u043f\u043e\u0439;<\/p>\n<\/li>\n<li>\n<p>\u043a\u0430\u043a\u00a0\u0447\u0438\u0442\u0430\u0442\u044c <code>\/proc\/meminfo<\/code> \u0432\u043c\u0435\u0441\u0442\u043e memory.used \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u00a0Spark;<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u0447\u0435\u043c\u0443 <code>gpu_memory_utilization=0.60<\/code>, \u0430\u00a0\u043d\u0435 0.70\u00a0\u2014 \u0438 \u043f\u0440\u0438\u00a0\u0447\u0451\u043c \u0442\u0443\u0442 CUBLAS.<\/p>\n<\/li>\n<\/ul>\n<h3>\u0427\u0442\u043e\u00a0nvidia\u2011smi \u043e\u0442\u0434\u0430\u0451\u0442 \u043d\u0430\u00a0GB10<\/h3>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u044e \u043d\u0430\u00a0\u043f\u0440\u043e\u0434\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441, \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0439 \u0434\u043b\u044f\u00a0discrete GPU: <\/p>\n<pre><code>$ nvidia-smi --query-gpu=memory.used,memory.total --format=csvmemory.used [MiB], memory.total [MiB][N\/A], [N\/A]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u00a0\u0447\u0442\u043e\u2011\u0442\u043e \u043d\u0435\u00a0\u0442\u0430\u043a \u0441\u00a0\u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u043c\u00a0\u2014 <code>nvidia-smi<\/code> \u0431\u0435\u0437\u00a0\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 GPU, \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443, \u043f\u0438\u0442\u0430\u043d\u0438\u0435, \u0443\u0442\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u044e. \u041d\u043e\u00a0\u043a\u0430\u043a\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0448\u044c \u043f\u0440\u043e\u00a0\u043f\u0430\u043c\u044f\u0442\u044c\u00a0\u2014 \u043f\u0443\u0441\u0442\u043e\u0442\u0430. \u0418 \u043d\u0435 \u00ab0\u00bb, \u0430\u00a0\u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0441\u0442\u0440\u043e\u043a\u0430 <code>[N\/A]<\/code>.<\/p>\n<p>\u042d\u0442\u043e \u043d\u0435\u00a0\u0431\u0430\u0433\u00a0\u2014 \u044d\u0442\u043e by design, \u043d\u0430\u00a0\u0444\u043e\u0440\u0443\u043c\u0430\u0445 NVIDIA \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442\u0441\u044f. \u041d\u0430\u00a0GB10\u00a0\u043d\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e VRAM\u2011\u0440\u0435\u0433\u0438\u043e\u043d\u0430: CPU \u0438 GPU \u0434\u0435\u043b\u044f\u0442 128\u00a0GiB LPDDR5x \u043a\u0430\u043a\u00a0\u043e\u0434\u0438\u043d \u043a\u043e\u0433\u0435\u0440\u0435\u043d\u0442\u043d\u044b\u0439 \u043f\u0443\u043b. NVML, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u043d\u044c\u0448\u0435 \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e discrete GPU \u0447\u0435\u0441\u0442\u043d\u043e \u0440\u0435\u043f\u043e\u0440\u0442\u0438\u043b \u00ab\u0437\u0430\u043d\u044f\u0442\u043e\/\u0432\u0441\u0435\u0433\u043e\u00bb, \u043d\u0430\u00a0\u0435\u0434\u0438\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0435\u00a0\u0437\u043d\u0430\u0435\u0442, \u0447\u0442\u043e\u00a0\u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c. \u0421\u00a0\u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432\u0441\u0435 128\u00a0GiB \u0438 \u0442\u0430\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b GPU \u0432\u0441\u0435\u0433\u0434\u0430\u00a0\u2014 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438 \u00abVRAM \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e\u00bb \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435\u0442.<\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u0438\u0434\u0451\u0442 \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0439, \u0438 \u043a\u0430\u0436\u0434\u043e\u0435 \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p><strong>dcgm\u2011exporter<\/strong> \u043d\u0430\u00a0Spark \u043d\u0435\u00a0\u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f. \u0422\u043e\u0447\u043d\u0435\u0435, \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043f\u043e\u0434\u043d\u0438\u043c\u0435\u0442\u0441\u044f, \u043d\u043e\u00a0\u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u043f\u043e\u00a0\u043f\u0430\u043c\u044f\u0442\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u0443\u0441\u0442\u044b\u0435\u00a0\u2014 \u043e\u043d \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d \u043f\u043e\u0432\u0435\u0440\u0445 NVML\/DCGM, \u0438 \u043d\u0430\u00a0GB10\u00a0\u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0442\u0443\u00a0\u0436\u0435 \u0441\u043b\u0435\u043f\u043e\u0442\u0443. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 NVIDIA Grafana\u2011\u0434\u0430\u0448\u0431\u043e\u0440\u0434\u044b \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0432\u00a0\u043f\u0443\u0441\u0442\u044b\u0435 \u043f\u0430\u043d\u0435\u043b\u0438.<\/p>\n<p><strong>nvtop<\/strong> \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u00a0\u0436\u0435 <code>[N\/A]<\/code> \u0432\u00a0memory\u2011\u043a\u043e\u043b\u043e\u043d\u043a\u0435. \u0416\u0430\u043b\u043a\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0nvtop \u0443\u0434\u043e\u0431\u043d\u044b\u0439. \u041d\u043e\u00a0\u043e\u043d \u0442\u043e\u0436\u0435 \u0441\u0438\u0434\u0438\u0442 \u043d\u0430\u00a0NVML.<\/p>\n<p><strong>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 Grafana NVIDIA dashboard<\/strong> \u0432\u00a0memory\u2011\u043f\u0430\u043d\u0435\u043b\u044f\u0445\u00a0\u2014 \u043f\u0443\u0441\u0442\u043e\u0442\u0430. \u0418 \u0441\u0430\u043c\u043e\u0435 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u0435: Grafana \u043d\u0435\u00a0\u043a\u0440\u0438\u0447\u0438\u0442 \u00ab\u043d\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445\u00bb, \u043e\u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0438\u0441\u0443\u0435\u0442 \u043f\u0440\u044f\u043c\u0443\u044e\u00a0\u043b\u0438\u043d\u0438\u044e \u043f\u043e\u00a0\u043d\u0443\u043b\u044e. \u0411\u0435\u0437\u00a0collector&#8217;\u0430 \u0442\u044b\u00a0\u0431\u044b \u044d\u0442\u043e \u043d\u0435\u00a0\u0437\u0430\u043c\u0435\u0442\u0438\u043b \u043d\u0435\u0434\u0435\u043b\u044f\u043c\u0438. \u0414\u0430\u0448\u0431\u043e\u0440\u0434 \u0432\u0440\u043e\u0434\u0435 \u0435\u0441\u0442\u044c, \u043d\u0430\u00a0\u043d\u0451\u043c \u0447\u0442\u043e\u2011\u0442\u043e \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043d\u043e\u00a0\u2014 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041d\u0430\u00a0\u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0435\u0439 \u0441\u043b\u0435\u043f\u044b\u0435.<\/p>\n<p>\u041c\u043e\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0430\u0441\u044c \u0432\u00a0\u043f\u0440\u043e\u0441\u0442\u0443\u044e: \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e\u00a0\u043d\u0430\u00a0GB10\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0438 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0438\u0437\u00a0\u044d\u0442\u043e\u0433\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433.<\/p>\n<h3>\u0427\u0442\u043e\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442: \u2011query\u2011compute\u2011apps<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u043a\u043e\u043f\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435 \u0432\u00a0\u043e\u043f\u0446\u0438\u0438 nvidia\u2011smi, \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0434\u043d\u0430 \u0432\u0435\u0442\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u00a0Spark \u043e\u0442\u0434\u0430\u0451\u0442 \u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435:<\/p>\n<pre><code>$ nvidia-smi --query-compute-apps=gpu_uuid,pid,process_name,used_memory --format=csvGPU-40770741-..., 2716588, \/opt\/app-root\/bin\/python3, 1254 MiBGPU-40770741-..., 2725545, VLLM::EngineCore, 1531 MiBGPU-40770741-..., 2725763, VLLM::EngineCore, 1949 MiB<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>NVML, \u043a\u0430\u043a\u00a0\u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c, \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u0437\u043d\u0430\u0435\u0442, \u0441\u043a\u043e\u043b\u044c\u043a\u043e GPU\u2011\u043f\u0430\u043c\u044f\u0442\u0438 \u0430\u043b\u043b\u043e\u0446\u0438\u0440\u043e\u0432\u0430\u043b \u043a\u0430\u0436\u0434\u044b\u0439 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u00a0\u2014 \u043e\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u00a0\u0443\u043c\u0435\u0435\u0442 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u00a0\u043e\u0431\u0449\u0443\u044e \u0446\u0438\u0444\u0440\u0443 \u0434\u043b\u044f\u00a0\u0435\u0434\u0438\u043d\u043e\u0433\u043e \u043f\u0443\u043b\u0430. \u042d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u043c\u043e\u0441\u0442 \u043a\u00a0\u0440\u0435\u0448\u0435\u043d\u0438\u044e: \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0438\u0437 <code>\/proc\/meminfo<\/code> (\u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0441\u00a0\u0435\u0434\u0438\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u043e\u043d\u0430 \u0438 \u0442\u0430\u043a \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0430\u044f), \u0430\u00a0\u0430\u0442\u0440\u0438\u0431\u0443\u0446\u0438\u044f \u00ab\u043a\u0442\u043e \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u044a\u0435\u043b\u00bb\u00a0\u2014 \u0438\u0437 <code>--query-compute-apps<\/code>. \u0421\u043b\u043e\u0436\u0438\u0442\u044c \u0438\u0445 \u0432\u00a0\u043e\u0434\u0438\u043d \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u00a0\u2014 \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0435\u00a0\u043d\u0430\u0443\u0447\u043d\u0430\u044f, \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c.<\/p>\n<h3>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430: \u0442\u0440\u0438 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u0441\u043b\u043e\u044f<\/h3>\n<p>\u042f \u0440\u0430\u0437\u0431\u0438\u043b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u043d\u0430\u00a0\u0442\u0440\u0438 \u0441\u043b\u043e\u044f, \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439:<\/p>\n<ol>\n<li>\n<p><strong>Textfile collector<\/strong>\u00a0\u2014 \u0437\u0430\u0431\u0438\u0440\u0430\u0435\u0442 \u0431\u0430\u0437\u043e\u0432\u044b\u0435 GPU\u2011\u043c\u0435\u0442\u0440\u0438\u043a\u0438 (\u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430, \u0443\u0442\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c, \u0447\u0430\u0441\u0442\u043e\u0442\u0430) \u0447\u0435\u0440\u0435\u0437 nvidia\u2011smi \u0438 \u043f\u0438\u0448\u0435\u0442 \u0438\u0445 \u0432\u00a0Prometheus\u2011\u0444\u043e\u0440\u043c\u0430\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0447\u0438\u0442\u0430\u0435\u0442 node\u2011exporter. \u0422\u0443\u0434\u0430\u00a0\u0436\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f <code>node_memory_*<\/code> \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0441\u0430\u043c\u043e\u0433\u043e node\u2011exporter\u00a0\u2014 \u0447\u0435\u0440\u0435\u0437 \u043d\u0438\u0445 \u0432\u0438\u0434\u043d\u0430 \u043e\u0431\u0449\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u043a\u043e\u0440\u043e\u0431\u043a\u0438;<\/p>\n<\/li>\n<li>\n<p><strong>Per\u2011container attribution<\/strong>\u00a0\u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <code>agmind gpu status<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043a\u0442\u043e \u0438\u0437\u00a0\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0441\u043a\u043e\u043b\u044c\u043a\u043e GPU\u2011\u043f\u0430\u043c\u044f\u0442\u0438 \u0437\u0430\u043d\u044f\u043b \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441. \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 <code>docker top<\/code> + <code>nvidia-smi --query-compute-apps<\/code>. \u0421\u0443\u043c\u043c\u0430\u0440\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0432\u00a0Grafana \u043d\u0435\u00a0\u0434\u0430\u0451\u0442, \u0437\u0430\u0442\u043e \u0434\u0430\u0451\u0442 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430\u00a0\u0432\u043e\u043f\u0440\u043e\u0441 \u00ab\u043f\u043e\u0447\u0435\u043c\u0443 GPU \u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f\u00bb;<\/p>\n<\/li>\n<li>\n<p><strong>CLI\u2011\u0444\u043e\u043b\u043b\u0431\u044d\u043a \u043d\u0430 \/proc\/meminfo<\/strong>\u00a0\u2014 \u0435\u0441\u043b\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 nvidia\u2011smi \u043e\u0442\u0434\u0430\u0451\u0442 N\/A \u0432\u00a0memory \u043f\u043e\u043b\u044f\u0445, \u0441\u043a\u0440\u0438\u043f\u0442 \u0447\u0438\u0442\u0430\u0435\u0442 <code>\/proc\/meminfo<\/code> \u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0430\u043c\u044f\u0442\u044c \u0441\u00a0\u043f\u043e\u043c\u0435\u0442\u043a\u043e\u0439 <code>(unified)<\/code>. \u041f\u043e\u043b\u0435\u0437\u043d\u043e \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u00a0Spark.<\/p>\n<\/li>\n<\/ol>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u043f\u043e\u00a0\u0441\u043b\u043e\u044f\u043c.<\/p>\n<h3>Collector: 65\u00a0\u0441\u0442\u0440\u043e\u043a bash \u0438 \u0442\u0440\u0438 \u043d\u0435\u00a0\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/h3>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434\u00a0\u2014 <code>scripts\/gpu-metrics.sh<\/code> \u0432\u00a0\u0440\u0435\u043f\u0435, \u0432\u0441\u0435\u0433\u043e 65\u00a0\u0441\u0442\u0440\u043e\u043a. \u041f\u043e\u043a\u0430\u0436\u0443 \u0447\u0435\u0442\u044b\u0440\u0435 \u043c\u0435\u0441\u0442\u0430: \u043e\u0434\u0438\u043d \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043b\u044f\u00a0\u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0438 \u0442\u0440\u0438 \u043d\u0435\u00a0\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c.<\/p>\n<p>\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441:<\/p>\n<p>bash<\/p>\n<pre><code>data=$(nvidia-smi --query-gpu=index,temperature.gpu,utilization.gpu,power.draw,clocks.current.graphics,memory.used,memory.total,name \\    --format=csv,noheader,nounits)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0438\u0447\u0435\u0433\u043e \u044d\u043a\u0437\u043e\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e\u00a0\u2014 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 CSV\u2011\u0432\u044b\u0432\u043e\u0434. \u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430.<\/p>\n<p>\u0427\u0438\u0441\u0442\u043a\u0430 <code>[N\/A]<\/code> \u043f\u0435\u0440\u0435\u0434 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u043e\u043c:<\/p>\n<p>bash<\/p>\n<pre><code>mem_used=\"${mem_used\/\/\\[N\\\/A\\]\/0}\"mem_total=\"${mem_total\/\/\\[N\\\/A\\]\/0}\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u00a0\u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0432 <code>.prom<\/code> \u0444\u0430\u0439\u043b\u0435 \u043e\u043a\u0430\u0436\u0443\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u0438\u0434\u0430 <code>agmind_gpu_memory_used_bytes{...} [N\/A]<\/code>, \u0438 node\u2011exporter \u0440\u0443\u0433\u043d\u0451\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430\u00a0\u2014 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u044d\u0442\u0430 \u0441\u0442\u0440\u043e\u043a\u0430 \u0432\u00a0Prometheus \u043d\u0435\u00a0\u043f\u043e\u043f\u0430\u0434\u0451\u0442.<\/p>\n<p>Skip\u2011\u043b\u043e\u0433\u0438\u043a\u0430 \u0434\u043b\u044f\u00a0\u043c\u0435\u0442\u0440\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u00a0Spark \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0443\u043b\u0435\u0432\u044b\u0435:<\/p>\n<p>bash<\/p>\n<pre><code>if [[ \"$mem_used\" != \"0\" ]]; then    echo \"agmind_gpu_memory_used_bytes{${labels}} $((mem_used * 1048576))\"fi<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u042d\u0442\u043e \u0443\u0436\u0435 \u043d\u0435\u00a0\u0438\u0437\u00a0\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u0430\u00a0\u0438\u0437\u00a0\u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u00ab0\u00bb, Grafana \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u0440\u043e\u0432\u043d\u0443\u044e\u00a0\u043b\u0438\u043d\u0438\u044e \u043d\u0430\u00a0\u0434\u043d\u0435\u00a0\u2014 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a, \u0431\u0443\u0434\u0442\u043e \u043c\u0435\u0442\u0440\u0438\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u043e\u00a0\u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0443\u043b\u0435\u0432\u0430\u044f. \u042d\u0442\u043e \u0445\u0443\u0436\u0435, \u0447\u0435\u043c \u044f\u0432\u043d\u043e\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438: \u0441\u043c\u043e\u0442\u0440\u0438\u0448\u044c \u0438 \u0434\u0443\u043c\u0430\u0435\u0448\u044c \u00ab\u0430 GPU \u0442\u043e\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442?\u00bb. \u041b\u0443\u0447\u0448\u0435 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435\u00a0\u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443\u00a0\u2014 \u0442\u043e\u0433\u0434\u0430 \u0432\u00a0Grafana \u043f\u0430\u043d\u0435\u043b\u044c \u044f\u0432\u043d\u043e \u0441\u043a\u0430\u0436\u0435\u0442 \u00abNo data\u00bb, \u0438 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e\u00a0\u044d\u0442\u0443 \u043f\u0430\u043d\u0435\u043b\u044c \u043d\u0430\u0434\u043e \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430\u00a0\u0447\u0442\u043e\u2011\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0435 (\u0441\u043c. \u043d\u0438\u0436\u0435 \u043f\u0440\u043e\u00a0System Memory).<\/p>\n<p>Atomic rename \u0432\u00a0\u043a\u043e\u043d\u0446\u0435:<\/p>\n<p>bash<\/p>\n<pre><code>mv \"$TMP_FILE\" \"$PROM_FILE\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f, \u043d\u043e\u00a0\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0434\u0435\u0442\u0430\u043b\u044c. Node\u2011exporter \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442 textfile\u2011\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u043a\u0430\u0436\u0434\u044b\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434. \u0415\u0441\u043b\u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u044f\u043c\u043e \u0432 <code>.prom<\/code> \u0444\u0430\u0439\u043b\u00a0\u2014 \u0431\u0443\u0434\u0435\u0442 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f, \u043a\u043e\u0433\u0434\u0430 node\u2011exporter \u043e\u0442\u043a\u0440\u043e\u0435\u0442 \u0435\u0433\u043e \u0432\u00a0\u043c\u043e\u043c\u0435\u043d\u0442, \u043f\u043e\u043a\u0430 collector \u0435\u0449\u0451 \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442, \u0438 \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u0442\u044c \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443. \u041d\u0430\u00a0\u0431\u044b\u0441\u0442\u0440\u044b\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445 \u044d\u0442\u043e \u0441\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0434\u043a\u043e, \u043d\u0430\u00a0\u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445\u00a0\u2014 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e. \u041f\u0438\u0448\u0435\u043c \u0432 <code>tmp<\/code>, \u043f\u043e\u0442\u043e\u043c \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u043c\u00a0\u2014 \u0442\u0435\u043f\u0435\u0440\u044c node\u2011exporter \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u0438\u0434\u0438\u0442\u00a0\u043b\u0438\u0431\u043e \u0441\u0442\u0430\u0440\u0443\u044e \u043f\u043e\u043b\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e,\u00a0\u043b\u0438\u0431\u043e \u043d\u043e\u0432\u0443\u044e \u043f\u043e\u043b\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e, \u0431\u0435\u0437\u00a0\u043f\u043e\u043b\u043e\u0432\u0438\u043d\u043e\u043a.<\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u0440\u0430\u0437 \u0432 15\u00a0\u0441\u0435\u043a\u0443\u043d\u0434\u00a0\u2014 \u0447\u0435\u0440\u0435\u0437 cron \u0438\u043b\u0438\u00a0systemd timer, \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u043f\u043e\u00a0\u0441\u0443\u0442\u0438 \u043d\u0438\u043a\u0430\u043a\u043e\u0439. \u0414\u043b\u044f\u00a0GPU\u2011\u043c\u0435\u0442\u0440\u0438\u043a \u0442\u0430\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e.<\/p>\n<h3>\u0427\u0442\u043e\u00a0\u0432 \u0438\u0442\u043e\u0433\u0435 \u0432\u00a0Prometheus<\/h3>\n<p>\u0412\u043e\u0442 \u0436\u0438\u0432\u043e\u0439 \u0432\u044b\u0432\u043e\u0434 \u0438\u0437 <code>gpu_metrics.prom<\/code> \u043d\u0430\u00a0\u043c\u043e\u0451\u043c \u043f\u0440\u043e\u0434\u0435, \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441:<\/p>\n<pre><code>agmind_gpu_temperature_celsius{gpu=\"0\",name=\"NVIDIA_GB10\"} 47agmind_gpu_utilization_percent{gpu=\"0\",name=\"NVIDIA_GB10\"} 0agmind_gpu_power_watts{gpu=\"0\",name=\"NVIDIA_GB10\"} 10.66agmind_gpu_clock_mhz{gpu=\"0\",name=\"NVIDIA_GB10\"} 2405<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>Memory\u2011\u043c\u0435\u0442\u0440\u0438\u043a \u0432\u00a0\u0444\u0430\u0439\u043b\u0435 \u043d\u0435\u0442\u00a0\u2014 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 skip\u2011\u043b\u043e\u0433\u0438\u043a\u0430. \u042d\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e: \u043d\u0430\u00a0\u0438\u0445 \u043c\u0435\u0441\u0442\u0435 \u0432\u00a0Grafana \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 System Memory \u043f\u0430\u043d\u0435\u043b\u044c, \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u0430\u044f \u0447\u0435\u0440\u0435\u0437 <code>node_memory_MemTotal_bytes<\/code> \u0438 <code>node_memory_MemAvailable_bytes<\/code> \u043e\u0442\u00a0node\u2011exporter. \u041d\u0430\u00a0\u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0441\u00a0\u0435\u0434\u0438\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u044d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u00ab\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0430\u044f\u00bb \u043f\u0430\u043c\u044f\u0442\u044c\u00a0\u2014 \u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0430\u00a0CPU \u0438 GPU \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0435\u0442 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438.<\/p>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433 node\u2011exporter \u0431\u0435\u0437\u00a0\u0441\u044e\u0440\u043f\u0440\u0438\u0437\u043e\u0432:<\/p>\n<p>yaml<\/p>\n<pre><code>node-exporter:  image: prom\/node-exporter:v1.11.1  pid: host  volumes:    - \/proc:\/host\/proc:ro    - \/:\/rootfs:ro    - .\/monitoring\/textfile:\/textfile:ro  command:    - '--path.procfs=\/host\/proc'    - '--collector.textfile.directory=\/textfile'<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u043b\u044e\u0447\u0435\u0432\u043e\u0435\u00a0\u2014 <code>--collector.textfile.directory<\/code>. \u0412\u0441\u0451, \u0447\u0442\u043e\u00a0\u043b\u0435\u0436\u0438\u0442 \u0432\u00a0\u044d\u0442\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043a\u0430\u043a <code>*.prom<\/code>, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432\u00a0Prometheus.<\/p>\n<h3>Per\u2011container attribution: \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u0444\u0438\u0448\u043a\u0430<\/h3>\n<p>\u0411\u0430\u0437\u043e\u0432\u044b\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0438\u0437\u00a0collector&#8217;\u0430 \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442 \u043d\u0430\u00a0\u0432\u043e\u043f\u0440\u043e\u0441 \u00ab\u043a\u0430\u043a \u0441\u0435\u0431\u044f \u0447\u0443\u0432\u0441\u0442\u0432\u0443\u0435\u0442 GPU\u00bb. \u041e\u043d\u0438 \u043d\u0435\u00a0\u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442 \u043d\u0430 \u00ab\u043a\u0442\u043e \u0438\u0437\u00a0\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0435\u0433\u043e \u0437\u0430\u043d\u044f\u043b\u00bb. \u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u0443\u00a0\u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <code>agmind gpu status<\/code>. \u0412\u043e\u0442 \u0435\u0451 \u0436\u0438\u0432\u043e\u0439 \u0432\u044b\u0432\u043e\u0434 \u043d\u0430\u00a0\u043f\u0440\u043e\u0434\u0435:<\/p>\n<pre><code>GPUs:  GPU 0: NVIDIA GB10  | VRAM: 31382 \/ 124610 MiB (unified) (free: 93228 MiB) | Util: 0Container Assignments:  vLLM   -&gt; GPU 0  (VLLM_CUDA_DEVICE=0)  TEI    -&gt; not active (EMBED_PROVIDER=vllm-embed)GPU Processes:  agmind-docling                          | 1254 MiB  agmind-vllm-embed                       | 1531 MiB  agmind-vllm-rerank                      | 1949 MiB  agmind-ragflow                          |  292 MiB  agmind-ragflow                          |  292 MiB<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u042d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u0442\u043e, \u0440\u0430\u0434\u0438 \u0447\u0435\u0433\u043e \u0441\u0442\u043e\u0438\u043b\u043e \u0433\u043e\u0440\u043e\u0434\u0438\u0442\u044c \u0432\u0435\u0441\u044c \u044d\u0442\u043e\u0442 \u043e\u0433\u043e\u0440\u043e\u0434. \u042f \u0432\u00a0\u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443 \u0432\u0438\u0436\u0443:<\/p>\n<p>\u2014 \u043e\u0431\u0449\u0430\u044f \u0437\u0430\u043d\u044f\u0442\u043e\u0441\u0442\u044c GPU\u2011\u043f\u0430\u043c\u044f\u0442\u0438 (31\u00a0GiB \u0438\u0437 122);\u00a0\u2014 \u043f\u043e\u043c\u0435\u0442\u043a\u0430 <code>(unified)<\/code>\u00a0\u2014 \u0447\u0442\u043e\u0431\u044b \u044f \u043d\u0435\u00a0\u043f\u0443\u0442\u0430\u043b\u0441\u044f \u0441\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 discrete\u2011\u043a\u0430\u0440\u0442\u043e\u0439;\u00a0\u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0441\u00a0\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0435\u0439 \u043a\u0430\u0436\u0434\u043e\u0433\u043e.<\/p>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u0447\u0435\u0442\u044b\u0440\u0451\u0445\u0448\u0430\u0433\u043e\u0432\u044b\u0439 \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d (<code>scripts\/agmind.sh:661-704<\/code>):<\/p>\n<pre><code>1. docker compose ps -q                  \u2192 \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0441\u0442\u0435\u043a\u04302. docker top &lt;container&gt; -o pid         \u2192 \u043c\u0430\u043f\u0430 PID \u2192 \u0438\u043c\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u04303. nvidia-smi --query-compute-apps       \u2192 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0441 GPU-\u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0435\u04394. JOIN \u043f\u043e PID                           \u2192 \u0441\u0442\u0440\u043e\u043a\u0430 \u00ab\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 | \u0441\u043a\u043e\u043b\u044c\u043a\u043e MiB\u00bb<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 side\u2011effect: \u0435\u0441\u043b\u0438 \u043d\u0430\u00a0\u043a\u043e\u0440\u043e\u0431\u043a\u0435 \u0432\u0434\u0440\u0443\u0433 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u00a0GPU\u2011\u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0435\u0439 \u043d\u0435\u00a0\u0438\u0437\u00a0docker compose, \u043e\u043d \u043f\u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 <code>PID xxx | &lt;process_name&gt; | &lt;MiB&gt; (non-agmind)<\/code>. \u042d\u0442\u043e \u0441\u0440\u0430\u0437\u0443 \u0432\u0438\u0434\u043d\u043e\u00a0\u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043a\u0442\u043e\u2011\u0442\u043e \u0437\u0430\u043b\u043e\u0433\u0438\u043d\u0438\u043b\u0441\u044f \u043f\u043e\u00a0SSH \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b <code>python<\/code> \u0441\u00a0CUDA\u2011\u0432\u044b\u0437\u043e\u0432\u043e\u043c.<\/p>\n<p>\u0421\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u044b\u0439 peer\u2011worker \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0432\u00a0\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u043e, \u043f\u043b\u044e\u0441 \u0442\u0430\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f vLLM\u2011\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 (requests running\/waiting, GPU KV cache hit rate, p50\/p95\u00a0latency). \u041c\u0435\u0442\u0440\u0438\u043a\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u00a0QSFP 200G\u00a0\u043b\u0438\u043d\u043a\u0443 master \u2190 peer.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/dc3\/cb8\/4d3\/dc3cb84d3f393b8643b65004e3b3b125.png\" alt=\"peer-worker dashboard\" title=\"peer-worker dashboard\" width=\"2243\" height=\"996\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/dc3\/cb8\/4d3\/dc3cb84d3f393b8643b65004e3b3b125.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/dc3\/cb8\/4d3\/dc3cb84d3f393b8643b65004e3b3b125.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>peer\u2011worker dashboard<\/figcaption><\/div>\n<\/figure>\n<h3>CLI fallback \u043d\u0430 \/proc\/meminfo<\/h3>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a\u00a0\u0441\u0442\u0440\u043e\u043a\u0435 <code>VRAM: 31382 \/ 124610 MiB (unified)<\/code> \u0438\u0437\u00a0\u0432\u044b\u0432\u043e\u0434\u0430 \u0432\u044b\u0448\u0435. \u041e\u0442\u043a\u0443\u0434\u0430 \u0442\u0430\u043c \u0446\u0438\u0444\u0440\u044b, \u0435\u0441\u043b\u0438 nvidia\u2011smi \u043e\u0442\u0434\u0430\u0451\u0442 <code>[N\/A]<\/code>?<\/p>\n<p>\u041a\u0443\u0441\u043e\u043a \u0438\u0437 <code>scripts\/agmind.sh:617-626<\/code>:<\/p>\n<p>bash<\/p>\n<pre><code>if [[ \"$mem_total\" == *\"N\/A\"* || -z \"$mem_total\" ]]; then    meminfo_total=$(awk '\/^MemTotal:\/{print int($2\/1024)}' \/proc\/meminfo)    meminfo_avail=$(awk '\/^MemAvailable:\/{print int($2\/1024)}' \/proc\/meminfo)    mem_total=\"$meminfo_total\"    mem_used=\"$((meminfo_total - meminfo_avail))\"    mem_free=\"$meminfo_avail\"    unified_label=\" (unified)\"fi<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041b\u043e\u0433\u0438\u043a\u0430 \u043f\u0440\u044f\u043c\u043e\u043b\u0438\u043d\u0435\u0439\u043d\u0430\u044f: \u0435\u0441\u043b\u0438 nvidia\u2011smi \u043c\u043e\u043b\u0447\u0438\u0442, \u0443\u00a0\u043d\u0430\u0441 \u0435\u0434\u0438\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c; \u0430\u00a0\u0432\u00a0\u0435\u0434\u0438\u043d\u043e\u043c \u043f\u0443\u043b\u0435 \u00abGPU \u043f\u0430\u043c\u044f\u0442\u044c\u00bb\u00a0\u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u0449\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u043a\u043e\u0440\u043e\u0431\u043a\u0438. \u0427\u0438\u0442\u0430\u0435\u043c <code>MemTotal<\/code> \u0438 <code>MemAvailable<\/code> \u0438\u0437 <code>\/proc\/meminfo<\/code>, \u0441\u0447\u0438\u0442\u0430\u0435\u043c <code>used = total \u2212 available<\/code>, \u0441\u0442\u0430\u0432\u0438\u043c \u043f\u043e\u043c\u0435\u0442\u043a\u0443 <code>(unified)<\/code>, \u0447\u0442\u043e\u0431\u044b \u0432\u00a0\u0432\u044b\u0432\u043e\u0434\u0435\u00a0\u0431\u044b\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e\u00a0\u044d\u0442\u043e \u043d\u0435\u00a0\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0430\u044f VRAM, \u0430\u00a0\u043e\u0431\u0449\u0438\u0439 \u043f\u0443\u043b.<\/p>\n<p>\u0420\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043d\u0430\u043f\u0448\u043e\u0442 <code>\/proc\/meminfo<\/code> \u0441\u00a0\u043c\u043e\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u044b:<\/p>\n<pre><code>MemTotal:       127601388 kB     # ~121 GiBMemAvailable:    95409316 kB     # ~91 GiB \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043eSwapTotal:       33554428 kBSwapFree:        33319272 kB<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>121\u00a0GiB \u0432\u0438\u0434\u0438\u043c\u044b\u0445 \u0432\u00a0OS\u00a0\u2014 \u044d\u0442\u043e, \u043a\u0441\u0442\u0430\u0442\u0438, \u0443\u0436\u0435 \u043d\u0435\u00a0\u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e: NVIDIA \u043f\u0440\u043e\u0434\u0430\u0451\u0442 \u043a\u043e\u0440\u043e\u0431\u043a\u0443 \u043a\u0430\u043a \u00ab128\u00a0GB\u00bb, \u043d\u043e\u00a0\u043f\u043e\u0441\u043b\u0435 \u0440\u0435\u0437\u0435\u0440\u0432\u0430 \u043f\u043e\u0434\u00a0\u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0438 kernel reserved memory \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043e\u043a\u043e\u043b\u043e 121. \u041d\u0438\u0447\u0435\u0433\u043e \u0441\u0442\u0440\u0430\u0448\u043d\u043e\u0433\u043e, \u043d\u043e\u00a0\u043f\u0440\u0438\u00a0\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0431\u044e\u0434\u0436\u0435\u0442\u0430 \u043e\u043f\u0435\u0440\u0438\u0440\u0443\u0439\u0442\u0435 121, \u0430\u00a0\u043d\u0435 128.<\/p>\n<p>\u0421\u0430\u043c \u043f\u0440\u0438\u0451\u043c\u00a0\u2014 <code>\/proc\/meminfo<\/code> \u043a\u0430\u043a\u00a0fallback, \u043a\u043e\u0433\u0434\u0430 GPU API \u043d\u0435\u00a0\u043e\u0442\u0434\u0430\u0451\u0442 memory\u00a0\u2014 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c \u0437\u0430\u00a0\u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 Spark. \u0423\u00a0\u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0441\u00a0\u0435\u0434\u0438\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0441\u0432\u043e\u0438 \u043d\u044e\u0430\u043d\u0441\u044b: \u043d\u0430\u00a0Apple Silicon Metal Performance Shaders \u043e\u0442\u0434\u0430\u0451\u0442 <code>currentAllocatedSize<\/code>, \u0435\u0441\u0442\u044c IOReport \u0438 powermetrics; \u043d\u0430\u00a0AMD Strix Halo <code>rocm-smi<\/code> \u0440\u0435\u043f\u043e\u0440\u0442\u0438\u0442 \u0441\u0432\u043e\u0438 \u0446\u0438\u0444\u0440\u044b; \u043d\u0430\u00a0NVML\/GB10\u00a0\u2014 \u0442\u043e \u0441\u0430\u043c\u043e\u0435 <code>[N\/A]<\/code>. \u0413\u0434\u0435\u2011\u0442\u043e API \u043c\u043e\u043b\u0447\u0438\u0442 \u0441\u043e\u0432\u0441\u0435\u043c, \u0433\u0434\u0435\u2011\u0442\u043e \u0434\u0430\u0451\u0442 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u0443. <code>\/proc\/meminfo<\/code>\u00a0\u2014 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 last resort, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u0445\u043e\u0442\u044f\u00a0\u0431\u044b \u043e\u0431\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u0438 \u043b\u044f\u0436\u0435\u0442 \u0432\u00a0\u043b\u044e\u0431\u043e\u0439 Linux\u2011\u0441\u0442\u0435\u043a \u0431\u0435\u0437\u00a0\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439.<\/p>\n<h3>Memory budget \u043d\u0430 121\u00a0GiB: \u0431\u0435\u0437\u00a0\u043d\u0435\u0433\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u0435\u043d<\/h3>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0443\u00a0\u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0447\u0438\u0441\u043b\u0430. \u0427\u0442\u043e\u00a0\u0441\u00a0\u043d\u0438\u043c\u0438 \u0434\u0435\u043b\u0430\u0442\u044c? \u0427\u0442\u043e\u0431\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0441\u044f \u0438\u0437 \u00ab\u043a\u0430\u043a\u043e\u0439\u2011\u0442\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u00bb \u0432\u00a0\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0439, \u043d\u0443\u0436\u0435\u043d \u0431\u044e\u0434\u0436\u0435\u0442\u00a0\u2014 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0435 \u043f\u043e\u0440\u043e\u0433\u0438 \u00ab\u044d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u00bb, \u00ab\u044d\u0442\u043e \u0442\u0440\u0435\u0432\u043e\u0436\u043d\u043e\u00bb, \u00ab\u044d\u0442\u043e \u0432\u0441\u0451, \u0443\u043f\u0430\u043b\u0438\u00bb.<\/p>\n<p>\u041d\u0430 121\u00a0GiB \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u043f\u0443\u043b\u0430 \u044f \u0441\u0447\u0438\u0442\u0430\u044e \u0442\u0430\u043a. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0435\u0437\u0435\u0440\u0432 \u043f\u043e\u0434\u00a0\u0441\u0438\u0441\u0442\u0435\u043c\u0443:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0427\u0442\u043e\u00a0\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u0443\u0435\u0442\u0441\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">GiB<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Kernel + system<\/p>\n<\/td>\n<td>\n<p align=\"left\">10<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Buffer \/ page cache<\/p>\n<\/td>\n<td>\n<p align=\"left\">15<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Swap headroom<\/p>\n<\/td>\n<td>\n<p align=\"left\">10<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0418\u0442\u043e\u0433\u043e \u0432\u044b\u0447\u0435\u0441\u0442\u044c<\/p>\n<\/td>\n<td>\n<p align=\"left\">35<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c<\/p>\n<\/td>\n<td>\n<p align=\"left\">86<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Page cache \u0432\u0430\u0436\u043d\u043e \u044f\u0432\u043d\u043e \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u00a0\u2014 \u043d\u0430\u00a0read\u2011heavy \u0432\u043e\u0440\u043a\u043b\u0430\u0434\u0435 RAGFlow \u0441\u00a0ES\u2011\u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c\u0438 \u043a\u044d\u0448 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u043b\u0435\u0433\u043a\u043e \u0441\u044a\u0435\u0434\u0430\u0435\u0442 15\u201320\u00a0GiB. \u0415\u0441\u043b\u0438 \u0437\u0430\u043f\u0430\u0441 \u043d\u0435\u00a0\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c, Linux \u043d\u0430\u0447\u043d\u0451\u0442 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u044d\u0432\u0438\u043a\u0442\u0438\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, latency \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u0438 \u043f\u043e\u0435\u0434\u0435\u0442 \u0432\u0432\u0435\u0440\u0445, \u0438 \u0432\u00a0\u043b\u043e\u0433\u0430\u0445 \u0432\u044b \u044d\u0442\u043e \u043d\u0435\u00a0\u0443\u0432\u0438\u0434\u0438\u0442\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435\u00a0\u0441\u043b\u043e\u043c\u0430\u043b\u043e\u0441\u044c.<\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0439 split \u043d\u0430 86\u00a0GiB \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043d\u043e\u0433\u043e \u0431\u044e\u0434\u0436\u0435\u0442\u0430. \u0421\u0440\u0430\u0437\u0443 \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0430: \u0446\u0438\u0444\u0440\u044b \u043d\u0438\u0436\u0435\u00a0\u2014 \u044d\u0442\u043e \u043f\u0438\u043a\u043e\u0432\u044b\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u0438, \u043d\u0430\u00a0\u043f\u0440\u043e\u0434\u0435 \u043e\u043d\u0438 \u043d\u0435\u00a0\u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u043a\u00a0\u043e\u0434\u043d\u043e\u043c\u0443. vLLM \u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0432\u043e\u0438 ~83\u00a0GiB \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u044b\u0445\u043e\u0434\u044f\u0442 \u043d\u0430\u00a0\u043f\u0438\u043a\u0438 \u0440\u0435\u0434\u043a\u043e \u0438 \u043d\u0435\u00a0\u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 <code>gpu_memory_utilization=0.60<\/code> \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0447\u0438\u043c \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441\u043e\u043c, \u0430\u00a0\u043d\u0435\u00a0\u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c\u00a0\u2014 \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u043e \u043f\u043e\u00a0\u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c 86\u00a0GiB, \u0438 \u044d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440<\/p>\n<\/th>\n<th>\n<p align=\"left\">GiB<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">vLLM (<code>gpu_memory_utilization=0.60<\/code>)<\/p>\n<\/td>\n<td>\n<p align=\"left\">~83<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">docling peak (batch 64)<\/p>\n<\/td>\n<td>\n<p align=\"left\">8\u201316<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Postgres <code>shared_buffers=8G<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">8<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Weaviate JVM heap<\/p>\n<\/td>\n<td>\n<p align=\"left\">15<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Redis + Celery + workers<\/p>\n<\/td>\n<td>\n<p align=\"left\">~5<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><em>\u0418\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u043c docling-\u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0435 \u0438 \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0447\u0435\u043c\u0443 0.60, \u0430 \u043d\u0435 0.70<\/em>. \u041d\u0430 0.70\u00a0\u0443\u00a0\u043c\u0435\u043d\u044f \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u043e \u0432\u0430\u043b\u0438\u0442\u0441\u044f CUBLAS \u0441\u00a0illegal memory access \u0432\u043d\u0443\u0442\u0440\u0438 vLLM, \u043f\u0440\u0438\u0447\u0451\u043c \u043d\u0435\u00a0\u0441\u0440\u0430\u0437\u0443, \u0430\u00a0\u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u043a\u043e\u0435\u2011\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0441\u043b\u0435 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 docling\u2011\u0437\u0430\u0434\u0430\u0447\u0438 \u043d\u0430\u00a0\u0431\u0430\u0442\u0447 \u0438\u0437\u00a0\u0434\u0435\u0441\u044f\u0442\u043a\u0430 PDF. \u0422\u043e\u0447\u043d\u0443\u044e \u043f\u0440\u0438\u0447\u0438\u043d\u0443 \u044f \u043d\u0435\u00a0\u0434\u043e\u043a\u043e\u043f\u0430\u043b\u0441\u044f, \u043d\u043e\u00a0\u0440\u0430\u0431\u043e\u0447\u0430\u044f \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u0430\u00a0\u2014 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u043f\u0443\u043b\u0430 \u0432\u00a0\u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 vLLM\u2011\u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u0438 docling\u2011\u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0440\u0430\u0441\u0442\u0443\u0442. \u041d\u0430 0.60\u00a0\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043d\u0435\u00a0\u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0443\u00a0\u0432\u0430\u0441 \u0432\u0442\u043e\u0440\u043e\u0439 Spark \u0432\u044b\u0434\u0435\u043b\u0435\u043d \u043f\u043e\u0434\u00a0vLLM (dual\u2011Spark \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0438\u0437\u00a0\u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438), \u0442\u0430\u043c \u044d\u0442\u043e\u0442 \u043f\u0440\u0435\u0434\u0435\u043b \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0442\u044c \u0432\u044b\u0448\u0435\u00a0\u2014 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043e\u0442\u00a0docling \u043d\u0430\u00a0\u0442\u043e\u0439\u00a0\u0436\u0435 \u043a\u043e\u0440\u043e\u0431\u043a\u0435 \u043d\u0435\u0442.<\/p>\n<h3>\u0427\u0442\u043e\u00a0\u0432 \u0438\u0442\u043e\u0433\u0435 \u0432\u00a0Grafana<\/h3>\n<p>\u0414\u0430\u0448\u0431\u043e\u0440\u0434 <code>gpu.json<\/code> \u0434\u043b\u044f\u00a0master Spark \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437\u00a0\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u0435\u043a\u0446\u0438\u0439.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b5e\/415\/e97\/b5e415e970ba43edb97261925bcb8d28.png\" alt=\"gpu.json master dashboard\" title=\"gpu.json master dashboard\" width=\"2235\" height=\"1099\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/b5e\/415\/e97\/b5e415e970ba43edb97261925bcb8d28.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b5e\/415\/e97\/b5e415e970ba43edb97261925bcb8d28.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>gpu.json master dashboard<\/figcaption><\/div>\n<\/figure>\n<p>Top row\u00a0\u2014 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 gauges: \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 (47\u201348\u00a0\u00b0C \u0432\u00a0idle), \u0443\u0442\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u044f (0% \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0435\u0442), \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c (10.66\u00a0W idle baseline \u0434\u043b\u044f\u00a0GB10\u00a0\u2014 \u043f\u043e\u0434\u00a0\u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u043e\u043d\u0430 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e \u0440\u0430\u0441\u0442\u0451\u0442), \u0447\u0430\u0441\u0442\u043e\u0442\u0430 2.4\u00a0GHz.<\/p>\n<p>Middle row\u00a0\u2014 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0437\u0430\u00a0\u0447\u0430\u0441: \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430, \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c \u0438 \u0443\u0442\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u044f. \u0412\u0438\u0434\u043d\u044b \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435 burst&#8217;\u044b GPU\u2011\u0440\u0430\u0431\u043e\u0442\u044b \u043c\u0435\u0436\u0434\u0443 \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u043c\u0438 idle. \u041f\u043e\u0434\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 (chat\u2011\u0441\u0435\u0441\u0441\u0438\u0438, RAG\u2011\u0437\u0430\u043f\u0440\u043e\u0441\u044b) \u0442\u0443\u0442 \u0432\u0438\u0434\u043d\u044b \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0435 \u043f\u043b\u0430\u0442\u043e \u043d\u0430 80\u2013100% \u0443\u0442\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p>Bottom row\u00a0\u2014 \u044d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u0442\u0430 \u0441\u0430\u043c\u0430\u044f \u00abSystem Memory \u0432\u043c\u0435\u0441\u0442\u043e VRAM\u00bb \u043f\u0430\u043d\u0435\u043b\u044c. Used \/ Available \/ Swap Used \u0441\u0442\u0440\u043e\u044f\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <code>node_memory_*<\/code> \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0447\u0435\u0441\u0442\u043d\u043e. \u041d\u0430\u00a0\u043c\u043e\u0451\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u043c idle\u2011\u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0435: ~32\u00a0GiB used, ~96\u00a0GiB available, swap 0\u00a0\u2014 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u043d\u043e \u0434\u043b\u044f\u00a0\u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u0432\u00a0\u043f\u043e\u043a\u043e\u0435, \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0435\u0442, \u0431\u00f3\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430.<\/p>\n<p>\u0412\u0435\u0441\u044c \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d \u043d\u0430\u00a0\u0434\u0432\u0443\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430\u0445: <code>agmind_gpu_*<\/code> (textfile collector) + <code>node_memory_*<\/code> (node\u2011exporter \u043f\u043e\u0432\u0435\u0440\u0445 <code>\/proc\/meminfo<\/code>). \u041d\u0438\u043a\u0430\u043a\u043e\u0433\u043e NVML.<\/p>\n<h3>\u0427\u0442\u043e\u00a0\u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u00a0\u0431\u043e\u0440\u0442\u043e\u043c<\/h3>\n<p>\u0427\u0435\u0441\u0442\u043d\u043e \u043f\u0440\u043e\u0433\u043e\u0432\u043e\u0440\u044e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u0431\u0435\u0437\u00a0\u043d\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u0441\u044f \u0432\u00a0\u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433.<\/p>\n<p>\u2014 \u041d\u0430\u00a0unified memory \u043d\u0435\u0442 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043e\u0442\u043b\u0438\u0447\u0438\u0442\u044c \u00ab\u0432\u043e\u0442 \u044d\u0442\u0438 X GiB \u0437\u0430\u043d\u044f\u043b GPU, \u0430\u00a0\u044d\u0442\u0438 Y\u00a0\u2014 CPU\u00bb. \u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u043f\u0443\u043b, \u0438 \u0432\u0435\u0441\u044c \u0441\u0442\u0435\u043a \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u043e\u0434\u00a0\u044d\u0442\u0438\u043c \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d. \u042d\u0442\u043e \u043d\u0435\u00a0\u043c\u043e\u044f \u0441\u043b\u0430\u0431\u043e\u0441\u0442\u044c, \u044d\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 unified\u2011\u0441\u0438\u0441\u0442\u0435\u043c \u0432 2026\u00a0\u0433\u043e\u0434\u0443. \u0415\u0441\u043b\u0438 \u0443\u00a0\u043a\u043e\u0433\u043e\u2011\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0442\u0430\u043a\u043e\u0439 split \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0431\u0443\u0434\u0443 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u0435\u043d \u0437\u0430\u00a0\u043d\u0430\u0432\u043e\u0434\u043a\u0443 \u0432\u00a0\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0445.<\/p>\n<p>\u2014 <code>dcgm-exporter<\/code> \u044f \u043d\u0435\u00a0\u0441\u043c\u043e\u0433 \u0437\u0430\u0432\u0435\u0441\u0442\u0438 \u043d\u0430\u00a0Spark. \u041e\u043d \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d \u043f\u043e\u0432\u0435\u0440\u0445 DCGM API, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442\u00a0NVML, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u00a0GB10\u00a0\u0432\u00a0memory\u2011\u043c\u0435\u0442\u0440\u0438\u043a\u0430\u0445 \u0441\u043b\u0435\u043f. \u0415\u0441\u043b\u0438 \u043a\u0442\u043e\u2011\u0442\u043e \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u043b \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u043d\u0430\u00a0Spark\u00a0\u2014 \u043f\u0438\u0448\u0438\u0442\u0435 \u0442\u043e\u0436\u0435.<\/p>\n<p>\u2014 <code>nvtop<\/code> \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 <code>[N\/A]<\/code> \u0432\u00a0memory \u043a\u043e\u043b\u043e\u043d\u043a\u0435. \u041b\u0435\u0447\u0438\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u0442\u0447\u0435\u043c \u0441\u0430\u043c\u043e\u0433\u043e nvtop, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043d\u0430\u00a0unified\u2011\u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u0445\u043e\u0434\u0438\u043b \u0432 <code>\/proc\/meminfo<\/code>. PR \u0432\u00a0\u0430\u043f\u0441\u0442\u0440\u0438\u043c \u044f \u043d\u0435\u00a0\u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u043b\u00a0\u2014 \u043d\u0430\u00a0\u043c\u043e\u043c\u0435\u043d\u0442 \u0441\u0442\u0430\u0442\u044c\u0438 \u0440\u0443\u043a\u0438 \u043d\u0435\u00a0\u0434\u043e\u0448\u043b\u0438.<\/p>\n<h3>\u0427\u0442\u043e\u00a0\u044f \u0438\u0437\u00a0\u044d\u0442\u043e\u0433\u043e \u0432\u044b\u043d\u0435\u0441<\/h3>\n<p>\u041d\u0430\u00a0\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c NVIDIA Grafana\u2011\u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0435 memory\u2011\u043f\u0430\u043d\u0435\u043b\u0438 \u043d\u0430\u00a0Spark \u0440\u0438\u0441\u0443\u044e\u0442 \u043f\u0440\u044f\u043c\u0443\u044e\u00a0\u043b\u0438\u043d\u0438\u044e \u043f\u043e\u00a0\u043d\u0443\u043b\u044e\u00a0\u2014 \u0438 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u00ab\u0432\u0441\u0451 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, GPU \u043d\u0435\u00a0\u0437\u0430\u043d\u044f\u0442\u00bb. \u0411\u0435\u0437\u00a0collector&#8217;\u0430 \u0432\u044b\u00a0\u0431\u044b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u043b\u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430\u00a0\u044d\u0442\u0443 \u043f\u0440\u044f\u043c\u0443\u044e \u043d\u0435\u0434\u0435\u043b\u044f\u043c\u0438 \u0438\u00a0\u0431\u044b\u0442\u044c \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u043c, \u0447\u0442\u043e\u00a0\u0443\u00a0\u0432\u0430\u0441 \u0432\u0441\u0451 \u043f\u043e\u0434\u00a0\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0435\u043c.<\/p>\n<p>\u042d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u043a\u00a0GB10\u00a0\u0438 \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u043a\u00a0unified memory. \u041b\u044e\u0431\u043e\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0435 observability\u2011\u0441\u0442\u0435\u043a \u043d\u0430\u00a0\u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c\u00a0\u0436\u0435\u043b\u0435\u0437\u0435, \u043d\u043e\u0432\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u0438\u043b\u0438\u00a0\u0441\u0432\u0435\u0436\u0435\u043c \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435, \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u043c\u0435\u0442\u0440\u0438\u043a \u043c\u043e\u0436\u0435\u0442 \u0432\u0440\u0430\u0442\u044c. \u041d\u0435\u00a0\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443, \u0430\u00a0\u043c\u043e\u043b\u0447\u0430 \u0432\u0440\u0430\u0442\u044c: \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u043e\u043b\u044c \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u044f\u043c\u044b\u0435 \u0442\u0430\u043c, \u0433\u0434\u0435 \u0434\u043e\u043b\u0436\u043d\u044b\u00a0\u0431\u044b\u0442\u044c \u043f\u0438\u043a\u0438, \u043d\u0435\u00a0\u0430\u043b\u0451\u0440\u0442\u0438\u0442\u044c \u043d\u0430\u00a0\u0443\u0441\u043b\u043e\u0432\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u0445 API \u0435\u0449\u0451 \u043d\u0435\u00a0\u0437\u043d\u0430\u0435\u0442. \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043e\u0442\u0441\u0442\u0430\u044e\u0442 \u043e\u0442\u00a0\u0436\u0435\u043b\u0435\u0437\u0430, \u0438 \u044d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u00a0\u2014 \u043e\u043d\u0438 \u043f\u0438\u0448\u0443\u0442\u0441\u044f \u043b\u044e\u0434\u044c\u043c\u0438, \u0443\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044d\u0442\u043e\u00a0\u0436\u0435\u043b\u0435\u0437\u043e \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u00a0\u043f\u043e\u043b\u0433\u043e\u0434\u0430\u2011\u0433\u043e\u0434 \u043f\u043e\u0437\u0436\u0435.<\/p>\n<p>\u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u044d\u0442\u043e \u043f\u043e\u0439\u043c\u0430\u0442\u044c\u00a0\u2014 \u0441\u0435\u0441\u0442\u044c \u043d\u0430\u00a0\u0447\u0430\u0441\u2011\u0434\u0432\u0430 \u0438 \u0440\u0443\u043a\u0430\u043c\u0438 \u0441\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e\u00a0\u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0438\u0437\u00a0\u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0442\u043e\u043c\u0443, \u0447\u0442\u043e\u00a0\u0432\u044b \u0432\u0438\u0434\u0438\u0442\u0435 \u0432\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0436\u0438\u0437\u043d\u0438. \u041e\u0442\u043a\u0440\u044b\u0442\u044c <code>htop<\/code>, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e\u00a0Postgres \u0435\u0441\u0442 8\u00a0GiB; \u043e\u0442\u043a\u0440\u044b\u0442\u044c Grafana, \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e\u00a0\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u043f\u0430\u043d\u0435\u043b\u044c \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 8\u00a0GiB. \u0415\u0441\u043b\u0438 \u0440\u0430\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435\u00a0\u2014 \u043a\u043e\u043f\u0430\u0442\u044c. \u042d\u0442\u043e \u043d\u0435\u00a0\u043f\u0430\u0440\u0430\u043d\u043e\u0439\u044f, \u044d\u0442\u043e \u0431\u0430\u0437\u043e\u0432\u0430\u044f \u0433\u0438\u0433\u0438\u0435\u043d\u0430 observability \u043d\u0430\u00a0\u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c\u00a0\u0436\u0435\u043b\u0435\u0437\u0435.<\/p>\n<p>\u0418 \u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u044b\u0432\u043e\u0434, \u043f\u043e\u043c\u0435\u043d\u044c\u0448\u0435. \u041a\u043e\u0433\u0434\u0430 \u044f \u0434\u0435\u043b\u0430\u043b \u044d\u0442\u043e\u0442 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433, \u043c\u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043f\u043b\u044e\u043d\u0443\u0442\u044c \u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u00a0\u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0435 \u00ab\u043e\u0431\u0449\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u00bb, \u0431\u0435\u0437\u00a0\u0430\u0442\u0440\u0438\u0431\u0443\u0446\u0438\u0438 \u043f\u043e\u00a0\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c. \u0425\u0432\u0430\u0442\u0438\u043b\u043e\u00a0\u0431\u044b \u0438 \u044d\u0442\u043e\u0433\u043e. \u041d\u043e\u00a0\u0432\u00a0\u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 RAG\u2011\u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u044f \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u0441\u044a\u0435\u0441\u0442 \u0432\u0441\u044e \u043f\u0430\u043c\u044f\u0442\u044c \u0438 \u0443\u043f\u0430\u0434\u0451\u0442 OOM\u2011\u043a\u0438\u043b\u043b, \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043c\u0435\u0436\u0434\u0443 \u00ab\u0443 \u043c\u0435\u043d\u044f \u043a\u043e\u043d\u0447\u0438\u043b\u0430\u0441\u044c \u043f\u0430\u043c\u044f\u0442\u044c\u00bb \u0438 \u00ab\u0443 \u043c\u0435\u043d\u044f \u043a\u043e\u043d\u0447\u0438\u043b\u0430\u0441\u044c \u043f\u0430\u043c\u044f\u0442\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0docling \u0432\u00a0\u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0440\u0430\u0437 \u0440\u0435\u0448\u0438\u043b \u0431\u0430\u0442\u0447\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432\u0435\u0441\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u043e\u0431\u043e\u0440\u043e\u0442 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438\u00bb\u00a0\u2014 \u044d\u0442\u043e \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043c\u0435\u0436\u0434\u0443 \u00ab\u0438\u0441\u043a\u0430\u0442\u044c \u043f\u044f\u0442\u044c \u0447\u0430\u0441\u043e\u0432\u00bb \u0438 \u00ab\u043f\u043e\u0447\u0438\u043d\u0438\u0442\u044c \u0437\u0430\u00a0\u043f\u044f\u0442\u044c \u043c\u0438\u043d\u0443\u0442\u00bb. Per\u2011container attribution \u0441\u0442\u043e\u0438\u0442 \u0432\u0435\u0447\u0435\u0440\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0438 \u043e\u043a\u0443\u043f\u0430\u0435\u0442\u0441\u044f \u0441\u00a0\u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u0430.<\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/1030802\/\" rel=\"noopener noreferrer nofollow\">\u041f\u0435\u0440\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c<\/a> \u043f\u0440\u043e\u00a0\u0441\u0431\u043e\u0440\u043a\u0443 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0433\u043e AI\u2011\u0441\u0442\u0435\u043a\u0430 \u043d\u0430\u00a0DGX Spark \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e \u0434\u043b\u044f\u00a0\u043c\u0435\u043d\u044f \u0445\u043e\u0440\u043e\u0448\u043e \u0437\u0430\u0448\u043b\u0430 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f\u043c\u00a0\u2014 \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0432\u0441\u0435\u043c, \u043a\u0442\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b \u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438. <\/p>\n<p><em>\u0412\u00a0\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 <\/em> <em>\u00a0\u2014 \u0442\u0440\u0438 \u043a\u0435\u0439\u0441\u0430 \u0441\u00a0Dify: \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c plugin_daemon, RAG\u2011\u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043d\u0442 \u0434\u043b\u044f\u00a0\u0441\u0438\u0441\u0430\u0434\u043c\u0438\u043d\u0430 (\u043b\u043e\u0433\u0438, \u043a\u043e\u043d\u0444\u0438\u0433\u0438, runbook&#8217;\u0438), \u0441\u0432\u044f\u0437\u043a\u0430 Dify + RAGFlow \u0434\u043b\u044f\u00a0\u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u0438 \u0442\u044f\u0436\u0451\u043b\u044b\u0445 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u0423\u0432\u0438\u0434\u0438\u043c\u0441\u044f.<\/em> <\/p>\n<p><a href=\"https:\/\/github.com\/botAGI\/AGmind\" rel=\"noopener noreferrer nofollow\">AGmind<\/a><\/p>\n<hr\/>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1031904\/\">https:\/\/habr.com\/ru\/articles\/1031904\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0421\u0432\u0435\u0436\u0435\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u043d\u0430\u00a0DGX Spark. \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u044e NVIDIA\u2011\u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0432\u00a0Grafana\u00a0\u2014 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 memory\u2011\u043f\u0430\u043d\u0435\u043b\u0435\u0439 \u043f\u0443\u0441\u0442\u044b\u0435, \u043f\u0440\u044f\u043c\u044b\u0435\u00a0\u043b\u0438\u043d\u0438\u0438 \u043f\u043e\u00a0\u043d\u0443\u043b\u044e. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u00a0\u0447\u0442\u043e\u2011\u0442\u043e \u043d\u0435\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b. \u0427\u0435\u0440\u0435\u0437 \u043f\u043e\u043b\u0447\u0430\u0441\u0430 \u0434\u043e\u0445\u043e\u0434\u0438\u0442: \u044d\u0442\u043e \u043d\u0435\u00a0\u0443\u00a0\u043c\u0435\u043d\u044f \u0441\u043b\u043e\u043c\u0430\u043b\u043e\u0441\u044c, \u044d\u0442\u043e NVML \u043d\u0430\u00a0GB10\u00a0\u0442\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.\u042d\u0442\u043e \u0442\u0430 \u043e\u0431\u043b\u0430\u0441\u0442\u044c, \u0433\u0434\u0435 \u043d\u0430\u00a0GB10\u00a0\u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e observability\u2011\u0441\u0442\u0435\u043a\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442: NVML \u043e\u0442\u0434\u0430\u0451\u0442 [N\/A] \u043d\u0430\u00a0memory.used \u0438 memory.total, dcgm\u2011exporter \u043d\u0435\u00a0\u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f, nvtop \u0432\u00a0memory\u2011\u043a\u043e\u043b\u043e\u043d\u043a\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0443\u0441\u0442\u043e\u0442\u0443. \u0412\u00a0Grafana NVIDIA\u2011\u0434\u0430\u0448\u0431\u043e\u0440\u0434\u044b \u043f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0442\u0430\u043a, \u0431\u0443\u0434\u0442\u043e GPU \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435\u0442\u00a0\u2014 \u0438 \u044d\u0442\u043e \u043d\u0435\u00a0\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0Grafana \u043f\u0440\u0438\u00a0\u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435\u00a0\u043a\u0440\u0438\u0447\u0438\u0442, \u0430\u00a0\u043c\u043e\u043b\u0447\u0430 \u0440\u0438\u0441\u0443\u0435\u0442 \u0440\u043e\u0432\u043d\u0443\u044e\u00a0\u043b\u0438\u043d\u0438\u044e \u043f\u043e\u00a0\u043d\u0443\u043b\u044e.\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f\u00a0\u2014 \u043f\u0440\u043e\u00a0\u0442\u043e, \u043a\u0430\u043a\u00a0\u044f \u044d\u0442\u043e \u043c\u0435\u0441\u0442\u043e \u043e\u0431\u043e\u0448\u0451\u043b \u0438 \u0447\u0442\u043e\u00a0\u0432\u00a0\u0438\u0442\u043e\u0433\u0435 \u0443\u0432\u0438\u0434\u0435\u043b \u0432\u00a0Grafana. \u0422\u0440\u0451\u0445\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0430\u044f \u0441\u0445\u0435\u043c\u0430: textfile collector \u0434\u043b\u044f\u00a0\u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043c\u0435\u0442\u0440\u0438\u043a, per\u2011container attribution \u0447\u0435\u0440\u0435\u0437 docker top + nvidia-smi, \u0438 CLI\u2011\u0444\u043e\u043b\u043b\u0431\u044d\u043a \u043d\u0430 \/proc\/meminfo, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u00a0Spark, \u043d\u043e\u00a0\u0438 \u043d\u0430\u00a0\u0434\u0440\u0443\u0433\u0438\u0445 Linux\u2011\u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u0441\u00a0\u0435\u0434\u0438\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e (unified memory)\u00a0\u2014 AMD Strix Halo \u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435.\u0412\u00a0\u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0443:\u043f\u043e\u0447\u0435\u043c\u0443 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043b\u043e\u043c\u0430\u044e\u0442\u0441\u044f \u043d\u0430\u00a0GB10;\u043a\u0430\u043a\u00a0\u0443\u0441\u0442\u0440\u043e\u0435\u043d collector \u043d\u0430 65\u00a0\u0441\u0442\u0440\u043e\u043a bash \u0438 \u043a\u0430\u043a\u0438\u0435 \u0442\u0440\u0438 \u043d\u0435\u00a0\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432\u00a0\u043d\u0451\u043c \u0441\u0438\u0434\u044f\u0442;\u043a\u0430\u043a\u00a0\u0434\u0435\u043b\u0430\u0442\u044c per\u2011container attribution GPU\u2011\u043f\u0430\u043c\u044f\u0442\u0438, \u043a\u043e\u0433\u0434\u0430 NVML \u0441\u043b\u0435\u043f\u043e\u0439;\u043a\u0430\u043a\u00a0\u0447\u0438\u0442\u0430\u0442\u044c \/proc\/meminfo \u0432\u043c\u0435\u0441\u0442\u043e memory.used \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u00a0Spark;\u043f\u043e\u0447\u0435\u043c\u0443 gpu_memory_utilization=0.60, \u0430\u00a0\u043d\u0435 0.70\u00a0\u2014 \u0438 \u043f\u0440\u0438\u00a0\u0447\u0451\u043c \u0442\u0443\u0442 CUBLAS.\u0427\u0442\u043e\u00a0nvidia\u2011smi \u043e\u0442\u0434\u0430\u0451\u0442 \u043d\u0430\u00a0GB10\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u044e \u043d\u0430\u00a0\u043f\u0440\u043e\u0434\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441, \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0439 \u0434\u043b\u044f\u00a0discrete GPU: $ nvidia-smi &#8212;query-gpu=memory.used,memory.total &#8212;format=csvmemory.used [MiB], memory.total [MiB][N\/A], [N\/A]\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u00a0\u0447\u0442\u043e\u2011\u0442\u043e \u043d\u0435\u00a0\u0442\u0430\u043a \u0441\u00a0\u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u043c\u00a0\u2014 nvidia-smi \u0431\u0435\u0437\u00a0\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 GPU, \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443, \u043f\u0438\u0442\u0430\u043d\u0438\u0435, \u0443\u0442\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u044e. \u041d\u043e\u00a0\u043a\u0430\u043a\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0448\u044c \u043f\u0440\u043e\u00a0\u043f\u0430\u043c\u044f\u0442\u044c\u00a0\u2014 \u043f\u0443\u0441\u0442\u043e\u0442\u0430. \u0418 \u043d\u0435 \u00ab0\u00bb, \u0430\u00a0\u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0441\u0442\u0440\u043e\u043a\u0430 [N\/A].\u042d\u0442\u043e \u043d\u0435\u00a0\u0431\u0430\u0433\u00a0\u2014 \u044d\u0442\u043e by design, \u043d\u0430\u00a0\u0444\u043e\u0440\u0443\u043c\u0430\u0445 NVIDIA \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442\u0441\u044f. \u041d\u0430\u00a0GB10\u00a0\u043d\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e VRAM\u2011\u0440\u0435\u0433\u0438\u043e\u043d\u0430: CPU \u0438 GPU \u0434\u0435\u043b\u044f\u0442 128\u00a0GiB LPDDR5x \u043a\u0430\u043a\u00a0\u043e\u0434\u0438\u043d \u043a\u043e\u0433\u0435\u0440\u0435\u043d\u0442\u043d\u044b\u0439 \u043f\u0443\u043b. NVML, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u043d\u044c\u0448\u0435 \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e discrete GPU \u0447\u0435\u0441\u0442\u043d\u043e \u0440\u0435\u043f\u043e\u0440\u0442\u0438\u043b \u00ab\u0437\u0430\u043d\u044f\u0442\u043e\/\u0432\u0441\u0435\u0433\u043e\u00bb, \u043d\u0430\u00a0\u0435\u0434\u0438\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0435\u00a0\u0437\u043d\u0430\u0435\u0442, \u0447\u0442\u043e\u00a0\u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c. \u0421\u00a0\u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432\u0441\u0435 128\u00a0GiB \u0438 \u0442\u0430\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b GPU \u0432\u0441\u0435\u0433\u0434\u0430\u00a0\u2014 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438 \u00abVRAM \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e\u00bb \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435\u0442.\u0414\u0430\u043b\u044c\u0448\u0435 \u0438\u0434\u0451\u0442 \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0439, \u0438 \u043a\u0430\u0436\u0434\u043e\u0435 \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e.dcgm\u2011exporter \u043d\u0430\u00a0Spark \u043d\u0435\u00a0\u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f. \u0422\u043e\u0447\u043d\u0435\u0435, \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043f\u043e\u0434\u043d\u0438\u043c\u0435\u0442\u0441\u044f, \u043d\u043e\u00a0\u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u043f\u043e\u00a0\u043f\u0430\u043c\u044f\u0442\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u0443\u0441\u0442\u044b\u0435\u00a0\u2014 \u043e\u043d \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d \u043f\u043e\u0432\u0435\u0440\u0445 NVML\/DCGM, \u0438 \u043d\u0430\u00a0GB10\u00a0\u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0442\u0443\u00a0\u0436\u0435 \u0441\u043b\u0435\u043f\u043e\u0442\u0443. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 NVIDIA Grafana\u2011\u0434\u0430\u0448\u0431\u043e\u0440\u0434\u044b \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0432\u00a0\u043f\u0443\u0441\u0442\u044b\u0435 \u043f\u0430\u043d\u0435\u043b\u0438.nvtop \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u00a0\u0436\u0435 [N\/A] \u0432\u00a0memory\u2011\u043a\u043e\u043b\u043e\u043d\u043a\u0435. \u0416\u0430\u043b\u043a\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0nvtop \u0443\u0434\u043e\u0431\u043d\u044b\u0439. \u041d\u043e\u00a0\u043e\u043d \u0442\u043e\u0436\u0435 \u0441\u0438\u0434\u0438\u0442 \u043d\u0430\u00a0NVML.\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 Grafana NVIDIA dashboard \u0432\u00a0memory\u2011\u043f\u0430\u043d\u0435\u043b\u044f\u0445\u00a0\u2014 \u043f\u0443\u0441\u0442\u043e\u0442\u0430. \u0418 \u0441\u0430\u043c\u043e\u0435 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u0435: Grafana \u043d\u0435\u00a0\u043a\u0440\u0438\u0447\u0438\u0442 \u00ab\u043d\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445\u00bb, \u043e\u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0438\u0441\u0443\u0435\u0442 \u043f\u0440\u044f\u043c\u0443\u044e\u00a0\u043b\u0438\u043d\u0438\u044e \u043f\u043e\u00a0\u043d\u0443\u043b\u044e. \u0411\u0435\u0437\u00a0collector&#8217;\u0430 \u0442\u044b\u00a0\u0431\u044b \u044d\u0442\u043e \u043d\u0435\u00a0\u0437\u0430\u043c\u0435\u0442\u0438\u043b \u043d\u0435\u0434\u0435\u043b\u044f\u043c\u0438. \u0414\u0430\u0448\u0431\u043e\u0440\u0434 \u0432\u0440\u043e\u0434\u0435 \u0435\u0441\u0442\u044c, \u043d\u0430\u00a0\u043d\u0451\u043c \u0447\u0442\u043e\u2011\u0442\u043e \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043d\u043e\u00a0\u2014 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041d\u0430\u00a0\u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0435\u0439 \u0441\u043b\u0435\u043f\u044b\u0435.\u041c\u043e\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0430\u0441\u044c \u0432\u00a0\u043f\u0440\u043e\u0441\u0442\u0443\u044e: \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e\u00a0\u043d\u0430\u00a0GB10\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0438 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0438\u0437\u00a0\u044d\u0442\u043e\u0433\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433.\u0427\u0442\u043e\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442: \u2011query\u2011compute\u2011apps\u0415\u0441\u043b\u0438 \u043a\u043e\u043f\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435 \u0432\u00a0\u043e\u043f\u0446\u0438\u0438 nvidia\u2011smi, \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0434\u043d\u0430 \u0432\u0435\u0442\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u00a0Spark \u043e\u0442\u0434\u0430\u0451\u0442 \u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435:$ nvidia-smi &#8212;query-compute-apps=gpu_uuid,pid,process_name,used_memory &#8212;format=csvGPU-40770741-&#8230;, 2716588, \/opt\/app-root\/bin\/python3, 1254 MiBGPU-40770741-&#8230;, 2725545, VLLM::EngineCore, 1531 MiBGPU-40770741-&#8230;, 2725763, VLLM::EngineCore, 1949 MiBNVML, \u043a\u0430\u043a\u00a0\u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c, \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u0437\u043d\u0430\u0435\u0442, \u0441\u043a\u043e\u043b\u044c\u043a\u043e GPU\u2011\u043f\u0430\u043c\u044f\u0442\u0438 \u0430\u043b\u043b\u043e\u0446\u0438\u0440\u043e\u0432\u0430\u043b \u043a\u0430\u0436\u0434\u044b\u0439 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u00a0\u2014 \u043e\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u00a0\u0443\u043c\u0435\u0435\u0442 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u00a0\u043e\u0431\u0449\u0443\u044e \u0446\u0438\u0444\u0440\u0443 \u0434\u043b\u044f\u00a0\u0435\u0434\u0438\u043d\u043e\u0433\u043e \u043f\u0443\u043b\u0430. \u042d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u043c\u043e\u0441\u0442 \u043a\u00a0\u0440\u0435\u0448\u0435\u043d\u0438\u044e: \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0438\u0437 \/proc\/meminfo (\u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0441\u00a0\u0435\u0434\u0438\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u043e\u043d\u0430 \u0438 \u0442\u0430\u043a \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0430\u044f), \u0430\u00a0\u0430\u0442\u0440\u0438\u0431\u0443\u0446\u0438\u044f \u00ab\u043a\u0442\u043e \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u044a\u0435\u043b\u00bb\u00a0\u2014 \u0438\u0437 &#8212;query-compute-apps. \u0421\u043b\u043e\u0436\u0438\u0442\u044c \u0438\u0445 \u0432\u00a0\u043e\u0434\u0438\u043d \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u00a0\u2014 \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0435\u00a0\u043d\u0430\u0443\u0447\u043d\u0430\u044f, \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c.\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430: \u0442\u0440\u0438 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u0441\u043b\u043e\u044f\u042f \u0440\u0430\u0437\u0431\u0438\u043b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u043d\u0430\u00a0\u0442\u0440\u0438 \u0441\u043b\u043e\u044f, \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439:Textfile collector\u00a0\u2014 \u0437\u0430\u0431\u0438\u0440\u0430\u0435\u0442 \u0431\u0430\u0437\u043e\u0432\u044b\u0435 GPU\u2011\u043c\u0435\u0442\u0440\u0438\u043a\u0438 (\u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430, \u0443\u0442\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c, \u0447\u0430\u0441\u0442\u043e\u0442\u0430) \u0447\u0435\u0440\u0435\u0437 nvidia\u2011smi \u0438 \u043f\u0438\u0448\u0435\u0442 \u0438\u0445 \u0432\u00a0Prometheus\u2011\u0444\u043e\u0440\u043c\u0430\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0447\u0438\u0442\u0430\u0435\u0442 node\u2011exporter. \u0422\u0443\u0434\u0430\u00a0\u0436\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f node_memory_* \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0441\u0430\u043c\u043e\u0433\u043e node\u2011exporter\u00a0\u2014 \u0447\u0435\u0440\u0435\u0437 \u043d\u0438\u0445 \u0432\u0438\u0434\u043d\u0430 \u043e\u0431\u0449\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u043a\u043e\u0440\u043e\u0431\u043a\u0438;Per\u2011container attribution\u00a0\u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 agmind gpu status, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043a\u0442\u043e \u0438\u0437\u00a0\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0441\u043a\u043e\u043b\u044c\u043a\u043e GPU\u2011\u043f\u0430\u043c\u044f\u0442\u0438 \u0437\u0430\u043d\u044f\u043b \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441. \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 docker top + nvidia-smi &#8212;query-compute-apps. \u0421\u0443\u043c\u043c\u0430\u0440\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0432\u00a0Grafana \u043d\u0435\u00a0\u0434\u0430\u0451\u0442, \u0437\u0430\u0442\u043e \u0434\u0430\u0451\u0442 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430\u00a0\u0432\u043e\u043f\u0440\u043e\u0441 \u00ab\u043f\u043e\u0447\u0435\u043c\u0443 GPU \u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f\u00bb;CLI\u2011\u0444\u043e\u043b\u043b\u0431\u044d\u043a \u043d\u0430 \/proc\/meminfo\u00a0\u2014 \u0435\u0441\u043b\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 nvidia\u2011smi \u043e\u0442\u0434\u0430\u0451\u0442 N\/A \u0432\u00a0memory \u043f\u043e\u043b\u044f\u0445, \u0441\u043a\u0440\u0438\u043f\u0442 \u0447\u0438\u0442\u0430\u0435\u0442 \/proc\/meminfo \u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0430\u043c\u044f\u0442\u044c \u0441\u00a0\u043f\u043e\u043c\u0435\u0442\u043a\u043e\u0439 (unified). \u041f\u043e\u043b\u0435\u0437\u043d\u043e \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u00a0Spark.\u0414\u0430\u043b\u044c\u0448\u0435 \u043f\u043e\u00a0\u0441\u043b\u043e\u044f\u043c.Collector: 65\u00a0\u0441\u0442\u0440\u043e\u043a bash \u0438 \u0442\u0440\u0438 \u043d\u0435\u00a0\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434\u00a0\u2014 scripts\/gpu-metrics.sh \u0432\u00a0\u0440\u0435\u043f\u0435, \u0432\u0441\u0435\u0433\u043e 65\u00a0\u0441\u0442\u0440\u043e\u043a. \u041f\u043e\u043a\u0430\u0436\u0443 \u0447\u0435\u0442\u044b\u0440\u0435 \u043c\u0435\u0441\u0442\u0430: \u043e\u0434\u0438\u043d \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043b\u044f\u00a0\u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0438 \u0442\u0440\u0438 \u043d\u0435\u00a0\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c.\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441:bashdata=$(nvidia-smi &#8212;query-gpu=index,temperature.gpu,utilization.gpu,power.draw,clocks.current.graphics,memory.used,memory.total,name \\    &#8212;format=csv,noheader,nounits)\u041d\u0438\u0447\u0435\u0433\u043e \u044d\u043a\u0437\u043e\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e\u00a0\u2014 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 CSV\u2011\u0432\u044b\u0432\u043e\u0434. \u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430.\u0427\u0438\u0441\u0442\u043a\u0430 [N\/A] \u043f\u0435\u0440\u0435\u0434 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u043e\u043c:bashmem_used=&#187;${mem_used\/\/\\[N\\\/A\\]\/0}&#187;mem_total=&#187;${mem_total\/\/\\[N\\\/A\\]\/0}&#187;\u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u00a0\u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0432 .prom \u0444\u0430\u0439\u043b\u0435 \u043e\u043a\u0430\u0436\u0443\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u0438\u0434\u0430 agmind_gpu_memory_used_bytes{&#8230;} [N\/A], \u0438 node\u2011exporter \u0440\u0443\u0433\u043d\u0451\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430\u00a0\u2014 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u044d\u0442\u0430 \u0441\u0442\u0440\u043e\u043a\u0430 \u0432\u00a0Prometheus \u043d\u0435\u00a0\u043f\u043e\u043f\u0430\u0434\u0451\u0442.Skip\u2011\u043b\u043e\u0433\u0438\u043a\u0430 \u0434\u043b\u044f\u00a0\u043c\u0435\u0442\u0440\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u00a0Spark \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0443\u043b\u0435\u0432\u044b\u0435:bashif [[ &#171;$mem_used&#187; != &#171;0&#187; ]]; then    echo &#171;agmind_gpu_memory_used_bytes{${labels}} $((mem_used * 1048576))&#187;fi\u042d\u0442\u043e \u0443\u0436\u0435 \u043d\u0435\u00a0\u0438\u0437\u00a0\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u0430\u00a0\u0438\u0437\u00a0\u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u00ab0\u00bb, Grafana \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u0440\u043e\u0432\u043d\u0443\u044e\u00a0\u043b\u0438\u043d\u0438\u044e \u043d\u0430\u00a0\u0434\u043d\u0435\u00a0\u2014 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a, \u0431\u0443\u0434\u0442\u043e \u043c\u0435\u0442\u0440\u0438\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u043e\u00a0\u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0443\u043b\u0435\u0432\u0430\u044f. \u042d\u0442\u043e \u0445\u0443\u0436\u0435, \u0447\u0435\u043c \u044f\u0432\u043d\u043e\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438: \u0441\u043c\u043e\u0442\u0440\u0438\u0448\u044c \u0438 \u0434\u0443\u043c\u0430\u0435\u0448\u044c \u00ab\u0430 GPU \u0442\u043e\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442?\u00bb. \u041b\u0443\u0447\u0448\u0435 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435\u00a0\u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443\u00a0\u2014 \u0442\u043e\u0433\u0434\u0430 \u0432\u00a0Grafana \u043f\u0430\u043d\u0435\u043b\u044c \u044f\u0432\u043d\u043e \u0441\u043a\u0430\u0436\u0435\u0442 \u00abNo data\u00bb, \u0438 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e\u00a0\u044d\u0442\u0443 \u043f\u0430\u043d\u0435\u043b\u044c \u043d\u0430\u0434\u043e \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430\u00a0\u0447\u0442\u043e\u2011\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0435 (\u0441\u043c. \u043d\u0438\u0436\u0435 \u043f\u0440\u043e\u00a0System Memory).Atomic rename \u0432\u00a0\u043a\u043e\u043d\u0446\u0435:bashmv &#171;$TMP_FILE&#187; &#171;$PROM_FILE&#187;\u041c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f, \u043d\u043e\u00a0\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0434\u0435\u0442\u0430\u043b\u044c. Node\u2011exporter \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442 textfile\u2011\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u043a\u0430\u0436\u0434\u044b\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434. \u0415\u0441\u043b\u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u044f\u043c\u043e \u0432 .prom \u0444\u0430\u0439\u043b\u00a0\u2014 \u0431\u0443\u0434\u0435\u0442 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f, \u043a\u043e\u0433\u0434\u0430 node\u2011exporter \u043e\u0442\u043a\u0440\u043e\u0435\u0442 \u0435\u0433\u043e \u0432\u00a0\u043c\u043e\u043c\u0435\u043d\u0442, \u043f\u043e\u043a\u0430 collector \u0435\u0449\u0451 \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442, \u0438 \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u0442\u044c \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443. \u041d\u0430\u00a0\u0431\u044b\u0441\u0442\u0440\u044b\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445 \u044d\u0442\u043e \u0441\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0434\u043a\u043e, \u043d\u0430\u00a0\u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445\u00a0\u2014 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e. \u041f\u0438\u0448\u0435\u043c \u0432 tmp, \u043f\u043e\u0442\u043e\u043c \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u043c\u00a0\u2014 \u0442\u0435\u043f\u0435\u0440\u044c node\u2011exporter \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u0438\u0434\u0438\u0442\u00a0\u043b\u0438\u0431\u043e \u0441\u0442\u0430\u0440\u0443\u044e \u043f\u043e\u043b\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e,\u00a0\u043b\u0438\u0431\u043e \u043d\u043e\u0432\u0443\u044e \u043f\u043e\u043b\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e, \u0431\u0435\u0437\u00a0\u043f\u043e\u043b\u043e\u0432\u0438\u043d\u043e\u043a.\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u0440\u0430\u0437 \u0432 15\u00a0\u0441\u0435\u043a\u0443\u043d\u0434\u00a0\u2014 \u0447\u0435\u0440\u0435\u0437 cron \u0438\u043b\u0438\u00a0systemd timer, \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u043f\u043e\u00a0\u0441\u0443\u0442\u0438 \u043d\u0438\u043a\u0430\u043a\u043e\u0439. \u0414\u043b\u044f\u00a0GPU\u2011\u043c\u0435\u0442\u0440\u0438\u043a \u0442\u0430\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e.\u0427\u0442\u043e\u00a0\u0432 \u0438\u0442\u043e\u0433\u0435 \u0432\u00a0Prometheus\u0412\u043e\u0442 \u0436\u0438\u0432\u043e\u0439 \u0432\u044b\u0432\u043e\u0434 \u0438\u0437 gpu_metrics.prom \u043d\u0430\u00a0\u043c\u043e\u0451\u043c \u043f\u0440\u043e\u0434\u0435, \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441:agmind_gpu_temperature_celsius{gpu=&#187;0&#8243;,name=&#187;NVIDIA_GB10&#8243;} 47agmind_gpu_utilization_percent{gpu=&#187;0&#8243;,name=&#187;NVIDIA_GB10&#8243;} 0agmind_gpu_power_watts{gpu=&#187;0&#8243;,name=&#187;NVIDIA_GB10&#8243;} 10.66agmind_gpu_clock_mhz{gpu=&#187;0&#8243;,name=&#187;NVIDIA_GB10&#187;} 2405Memory\u2011\u043c\u0435\u0442\u0440\u0438\u043a \u0432\u00a0\u0444\u0430\u0439\u043b\u0435 \u043d\u0435\u0442\u00a0\u2014 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 skip\u2011\u043b\u043e\u0433\u0438\u043a\u0430. \u042d\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e: \u043d\u0430\u00a0\u0438\u0445 \u043c\u0435\u0441\u0442\u0435 \u0432\u00a0Grafana \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 System Memory \u043f\u0430\u043d\u0435\u043b\u044c, \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u0430\u044f \u0447\u0435\u0440\u0435\u0437 node_memory_MemTotal_bytes \u0438 node_memory_MemAvailable_bytes \u043e\u0442\u00a0node\u2011exporter. \u041d\u0430\u00a0\u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0441\u00a0\u0435\u0434\u0438\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u044d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u00ab\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0430\u044f\u00bb \u043f\u0430\u043c\u044f\u0442\u044c\u00a0\u2014 \u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0430\u00a0CPU \u0438 GPU \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0435\u0442 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438.\u041a\u043e\u043d\u0444\u0438\u0433 node\u2011exporter \u0431\u0435\u0437\u00a0\u0441\u044e\u0440\u043f\u0440\u0438\u0437\u043e\u0432:yamlnode-exporter:  image: prom\/node-exporter:v1.11.1  pid: host  volumes:    &#8212; \/proc:\/host\/proc:ro    &#8212; \/:\/rootfs:ro    &#8212; .\/monitoring\/textfile:\/textfile:ro  command:    &#8212; &#8216;&#8212;path.procfs=\/host\/proc&#8217;    &#8212; &#8216;&#8212;collector.textfile.directory=\/textfile&#8217;\u041a\u043b\u044e\u0447\u0435\u0432\u043e\u0435\u00a0\u2014 &#8212;collector.textfile.directory. \u0412\u0441\u0451, \u0447\u0442\u043e\u00a0\u043b\u0435\u0436\u0438\u0442 \u0432\u00a0\u044d\u0442\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043a\u0430\u043a *.prom, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432\u00a0Prometheus.Per\u2011container attribution: \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u0444\u0438\u0448\u043a\u0430\u0411\u0430\u0437\u043e\u0432\u044b\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0438\u0437\u00a0collector&#8217;\u0430 \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442 \u043d\u0430\u00a0\u0432\u043e\u043f\u0440\u043e\u0441 \u00ab\u043a\u0430\u043a \u0441\u0435\u0431\u044f \u0447\u0443\u0432\u0441\u0442\u0432\u0443\u0435\u0442 GPU\u00bb. \u041e\u043d\u0438 \u043d\u0435\u00a0\u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442 \u043d\u0430 \u00ab\u043a\u0442\u043e \u0438\u0437\u00a0\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0435\u0433\u043e \u0437\u0430\u043d\u044f\u043b\u00bb. \u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u0443\u00a0\u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 agmind gpu status. \u0412\u043e\u0442 \u0435\u0451 \u0436\u0438\u0432\u043e\u0439 \u0432\u044b\u0432\u043e\u0434 \u043d\u0430\u00a0\u043f\u0440\u043e\u0434\u0435:GPUs:  GPU 0: NVIDIA GB10  | VRAM: 31382 \/ 124610 MiB (unified) (free: 93228 MiB) | Util: 0Container Assignments:  vLLM   -&gt; GPU 0  (VLLM_CUDA_DEVICE=0)  TEI    -&gt; not active (EMBED_PROVIDER=vllm-embed)GPU Processes:  agmind-docling                          | 1254 MiB  agmind-vllm-embed                       | 1531 MiB  agmind-vllm-rerank                      | 1949 MiB  agmind-ragflow                          |  292 MiB  agmind-ragflow                          |  292 MiB\u042d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u0442\u043e, \u0440\u0430\u0434\u0438 \u0447\u0435\u0433\u043e \u0441\u0442\u043e\u0438\u043b\u043e \u0433\u043e\u0440\u043e\u0434\u0438\u0442\u044c \u0432\u0435\u0441\u044c \u044d\u0442\u043e\u0442 \u043e\u0433\u043e\u0440\u043e\u0434. \u042f \u0432\u00a0\u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443 \u0432\u0438\u0436\u0443:\u2014 \u043e\u0431\u0449\u0430\u044f \u0437\u0430\u043d\u044f\u0442\u043e\u0441\u0442\u044c GPU\u2011\u043f\u0430\u043c\u044f\u0442\u0438 (31\u00a0GiB \u0438\u0437 122);\u00a0\u2014 \u043f\u043e\u043c\u0435\u0442\u043a\u0430 (unified)\u00a0\u2014 \u0447\u0442\u043e\u0431\u044b \u044f \u043d\u0435\u00a0\u043f\u0443\u0442\u0430\u043b\u0441\u044f \u0441\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 discrete\u2011\u043a\u0430\u0440\u0442\u043e\u0439;\u00a0\u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0441\u00a0\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0435\u0439 \u043a\u0430\u0436\u0434\u043e\u0433\u043e.\u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u0447\u0435\u0442\u044b\u0440\u0451\u0445\u0448\u0430\u0433\u043e\u0432\u044b\u0439 \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d (scripts\/agmind.sh:661-704):1. docker compose ps -q                  \u2192 \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0441\u0442\u0435\u043a\u04302. docker top &lt;container&gt; -o pid         \u2192 \u043c\u0430\u043f\u0430 PID \u2192 \u0438\u043c\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u04303. nvidia-smi &#8212;query-compute-apps       \u2192 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0441 GPU-\u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0435\u04394. JOIN \u043f\u043e PID                           \u2192 \u0441\u0442\u0440\u043e\u043a\u0430 \u00ab\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 | \u0441\u043a\u043e\u043b\u044c\u043a\u043e MiB\u00bb\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 side\u2011effect: \u0435\u0441\u043b\u0438 \u043d\u0430\u00a0\u043a\u043e\u0440\u043e\u0431\u043a\u0435 \u0432\u0434\u0440\u0443\u0433 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u00a0GPU\u2011\u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0435\u0439 \u043d\u0435\u00a0\u0438\u0437\u00a0docker compose, \u043e\u043d \u043f\u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 PID xxx | &lt;process_name&gt; | &lt;MiB&gt; (non-agmind). \u042d\u0442\u043e \u0441\u0440\u0430\u0437\u0443 \u0432\u0438\u0434\u043d\u043e\u00a0\u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043a\u0442\u043e\u2011\u0442\u043e \u0437\u0430\u043b\u043e\u0433\u0438\u043d\u0438\u043b\u0441\u044f \u043f\u043e\u00a0SSH \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b python \u0441\u00a0CUDA\u2011\u0432\u044b\u0437\u043e\u0432\u043e\u043c.\u0421\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u044b\u0439 peer\u2011worker \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0432\u00a0\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u043e, \u043f\u043b\u044e\u0441 \u0442\u0430\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f vLLM\u2011\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 (requests running\/waiting, GPU KV cache hit rate, p50\/p95\u00a0latency). \u041c\u0435\u0442\u0440\u0438\u043a\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u00a0QSFP 200G\u00a0\u043b\u0438\u043d\u043a\u0443 master \u2190 peer.peer\u2011worker dashboardCLI fallback \u043d\u0430 \/proc\/meminfo\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a\u00a0\u0441\u0442\u0440\u043e\u043a\u0435 VRAM: 31382 \/ 124610 MiB (unified) \u0438\u0437\u00a0\u0432\u044b\u0432\u043e\u0434\u0430 \u0432\u044b\u0448\u0435. \u041e\u0442\u043a\u0443\u0434\u0430 \u0442\u0430\u043c \u0446\u0438\u0444\u0440\u044b, \u0435\u0441\u043b\u0438 nvidia\u2011smi \u043e\u0442\u0434\u0430\u0451\u0442 [N\/A]?\u041a\u0443\u0441\u043e\u043a \u0438\u0437 scripts\/agmind.sh:617-626:bashif [[ &#171;$mem_total&#187; == *&#187;N\/A&#187;* || -z &#171;$mem_total&#187; ]]; then    meminfo_total=$(awk &#8216;\/^MemTotal:\/{print int($2\/1024)}&#8217; \/proc\/meminfo)    meminfo_avail=$(awk&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-478706","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/478706","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=478706"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/478706\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=478706"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=478706"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=478706"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}