AI集群全链路监控:从GPU微架构指标到业务Metric关联

点击 "AladdinEdu,同学们用得起的【H卡】算力平台",H卡级别算力80G大显存按量计费灵活弹性顶级配置学生更享专属优惠


引言:AI算力时代的监控挑战

随着深度学习模型规模的指数级增长,AI训练集群已成为各大企业和科研机构的核心基础设施。一个典型的AI集群可能包含数百甚至数千块GPU,每块价值数十万元,如何充分高效地利用这些昂贵计算资源变得至关重要。传统的系统监控方案往往只关注节点级别的CPU、内存、网络等基础指标,无法深入洞察GPU内部的运行状态,更难以将底层硬件指标与上层业务表现相关联。

本文将深入探讨AI集群全链路监控体系的构建,从最底层的GPU微架构指标采集开始,到SM(Streaming Multiprocessor)利用率的深度剖析,最终建立训练任务的"性能指纹",实现硬件指标与业务Metric的智能关联分析。通过这套监控体系,运维团队可以快速定位性能瓶颈,研发人员可以优化训练代码,管理者可以做出精准的容量规划决策。

第一部分:GPU微架构监控基础

1.1 NVML架构与指标体系

NVIDIA Management Library (NVML) 是监控NVIDIA GPU设备的官方库,提供了一套完整的编程接口用于获取设备状态和性能指标。其架构如下图所示:

text 复制代码
+-----------------------+
|     Application       |
+-----------------------+
|     NVML Library      |
+-----------------------+
|   NVIDIA Driver       |
+-----------------------+
|   GPU Hardware        |
+-----------------------+

1.1.1 NVML核心指标分类

设备状态指标

  • 温度、功耗、时钟频率
  • ECC错误计数
  • PCIe链路信息

利用率指标

  • GPU整体利用率
  • 内存控制器利用率
  • PCIe吞吐量

性能计数器

  • SM活动周期计数
  • 各种指令吞吐量
  • 内存访问模式统计

1.2 NVML数据采集实战

1.2.1 基础环境配置

bash 复制代码
# 安装NVML开发包
sudo apt-get install cuda-nvml-dev

# 验证驱动版本
nvidia-smi --query-gpu=driver_version --format=csv

1.2.2 基础指标采集代码

c 复制代码
#include <nvml.h>
#include <stdio.h>
#include <unistd.h>

#define CHECK_NVML(call) do { \
    nvmlReturn_t result = call; \
    if (result != NVML_SUCCESS) { \
        fprintf(stderr, "NVML error %d at %s:%d\n", result, __FILE__, __LINE__); \
        exit(1); \
    } \
} while(0)

int main() {
    // 初始化NVML
    CHECK_NVML(nvmlInit());
    
    unsigned int device_count;
    CHECK_NVML(nvmlDeviceGetCount(&device_count));
    
    for (unsigned int i = 0; i < device_count; i++) {
        nvmlDevice_t device;
        CHECK_NVML(nvmlDeviceGetHandleByIndex(i, &device));
        
        // 获取设备名称
        char name[NVML_DEVICE_NAME_BUFFER_SIZE];
        CHECK_NVML(nvmlDeviceGetName(device, name, sizeof(name)));
        
        // 获取温度信息
        unsigned int temp;
        CHECK_NVML(nvmlDeviceGetTemperature(device, NVML_TEMPERATURE_GPU, &temp));
        
        // 获取功耗信息
        unsigned int power;
        CHECK_NVML(nvmlDeviceGetPowerUsage(device, &power));
        
        // 获取利用率信息
        nvmlUtilization_t utilization;
        CHECK_NVML(nvmlDeviceGetUtilizationRates(device, &utilization));
        
        printf("Device %d (%s):\n", i, name);
        printf("  Temperature: %u°C\n", temp);
        printf("  Power Usage: %uW\n", power / 1000);
        printf("  GPU Utilization: %u%%\n", utilization.gpu);
        printf("  Memory Utilization: %u%%\n", utilization.memory);
    }
    
    // 关闭NVML
    CHECK_NVML(nvmlShutdown());
    return 0;
}

1.2.3 高级性能计数器采集

对于深度性能分析,需要访问更底层的性能计数器:

c 复制代码
// 创建性能监控组
nvmlEventSet_t event_set;
CHECK_NVML(nvmlEventSetCreate(&event_set));

// 启用特定事件
CHECK_NVML(nvmlDeviceRegisterEvents(device, 
    NVML_GRSM_CLOCK_GATING_BLOCK_CYCLES_EVENT | 
    NVML_SM_ACTIVE_CYCLES_EVENT, 
    event_set));

// 读取事件数据
nvmlEventData_t event_data;
while (1) {
    CHECK_NVML(nvmlEventSetWait(event_set, &event_data, 1000));
    process_event_data(event_data);
}

// 清理资源
CHECK_NVML(nvmlEventSetFree(event_set));

第二部分:SM利用率深度剖析

2.1 SM架构与性能模型

NVIDIA GPU中的Streaming Multiprocessor(SM)是实际执行计算的核心单元。每个SM包含:

  • CUDA Cores:执行整数和单精度浮点运算
  • Tensor Cores:执行矩阵运算(Volta架构及以上)
  • 调度器:管理warp调度
  • 寄存器文件:存储线程状态
  • 共享内存:线程间通信的高速内存

2.1.1 SM利用率关键指标

计算利用率指标

  • SM活跃周期比例
  • 指令发射效率
  • Warp调度效率

内存利用率指标

  • 各级缓存命中率
  • 内存访问吞吐量
  • DRAM带宽利用率

特殊功能单元利用率

  • Tensor Core利用率
  • RT Core利用率(对于支持光追的GPU)

2.2 SM利用率采集实战

2.2.1 使用NVIDIA DCGM进行高级监控

NVIDIA Data Center GPU Manager (DCGM) 提供了更强大的监控能力:

bash 复制代码
# 安装DCGM
curl -O https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/datacenter-gpu-manager_2.2.9_amd64.deb
sudo dpkg -i datacenter-gpu-manager_2.2.9_amd64.deb

# 启动DCGM
sudo systemctl start nvidia-dcgm

2.2.2 DCGM Python接口示例

python 复制代码
import pydcgm
import dcgm_fields
from dcgm_structs import dcgmExceptionClass

# 初始化DCGM
dcgm_handle = pydcgm.DcgmHandle(ipAddress="127.0.0.1")
group_manager = dcgm_handle.GetGroupManager()
field_group_manager = dcgm_handle.GetFieldGroupManager()

# 创建监控组
group_id = group_manager.CreateGroup("monitoring_group")
group_manager.AddEntityToGroup(group_id, dcgm_fields.DCGM_FE_GPU)

# 定义监控字段
field_ids = [
    dcgm_fields.DCGM_FI_DEV_SM_CLOCK,
    dcgm_fields.DCGM_FI_DEV_SM_ACTIVITY,
    dcgm_fields.DCGM_FI_DEV_TENSOR_ACTIVITY,
    dcgm_fields.DCGM_FI_PROF_GR_ENGINE_ACTIVE,
    dcgm_fields.DCGM_FI_PROF_SM_ACTIVE,
    dcgm_fields.DCGM_FI_PROF_SM_OCCUPANCY,
    dcgm_fields.DCGM_FI_PROF_PIPE_TENSOR_ACTIVE,
]

field_group_id = field_group_manager.CreateFieldGroup("sm_fields", field_ids)

# 开始监控
dcgm_handle.system.WatchFields(group_id, field_group_id, updateFreq=1000000, maxKeepAge=3600)

# 获取数据
fields = dcgm_handle.fields.GetSinceValues(group_id, field_group_id, sinceTimestamp=0)
for field in fields:
    print(f"Field {field.fieldId}: {field.value}")

2.3 SM利用率数据分析

2.3.1 计算SM理论性能上限

python 复制代码
def calculate_theoretical_performance(gpu_arch, sm_count, clock_rate):
    """
    计算GPU的理论性能上限
    """
    if gpu_arch == "ampere":
        # Ampere架构: FP32性能 = SM数量 * 时钟频率 * 每个SM的FP32核心数 * 2 (FMA)
        fp32_cores_per_sm = 128
        theoretical_tflops = sm_count * (clock_rate / 1000) * fp32_cores_per_sm * 2 / 1000
        return theoretical_tflops
    elif gpu_arch == "hopper":
        # Hopper架构计算
        pass
    # 其他架构...

def analyze_sm_efficiency(actual_tflops, theoretical_tflops):
    """
    分析SM效率
    """
    efficiency = (actual_tflops / theoretical_tflops) * 100
    return efficiency

2.3.2 识别常见性能模式

python 复制代码
def identify_performance_pattern(sm_activity, memory_activity, tensor_activity):
    """
    识别常见的性能瓶颈模式
    """
    # 计算瓶颈
    if sm_activity > 80 and memory_activity < 30 and tensor_activity < 20:
        return "COMPUTE_BOUND"
    
    # 内存瓶颈
    elif sm_activity < 50 and memory_activity > 70:
        return "MEMORY_BOUND"
    
    # Tensor Core瓶颈
    elif sm_activity < 60 and tensor_activity > 75:
        return "TENSOR_CORE_BOUND"
    
    # 均衡状态
    elif 60 < sm_activity < 90 and 40 < memory_activity < 70:
        return "BALANCED"
    
    else:
        return "UNDEFINED"

第三部分:训练任务性能指纹构建

3.1 性能指纹概念与价值

训练任务性能指纹是一组能够唯一标识任务性能特征的多维指标集合。它就像人类的指纹一样,可以用于:

  1. 性能基线管理:建立正常性能基准,快速发现异常
  2. 瓶颈定位:精确定位性能瓶颈所在层次
  3. 资源调度优化:根据任务特征分配合适的硬件资源
  4. 成本分析:关联资源消耗与业务价值

3.2 性能指纹指标体系

3.2.1 硬件层指标

yaml 复制代码
hardware_metrics:
  gpu_utilization: 
    description: "GPU整体利用率"
    unit: "percent"
    weight: 0.15
    
  sm_efficiency:
    description: "SM计算效率"
    unit: "percent" 
    weight: 0.20
    
  memory_bandwidth_utilization:
    description: "内存带宽利用率"
    unit: "percent"
    weight: 0.15
    
  tensor_core_utilization:
    description: "Tensor Core利用率"
    unit: "percent"
    weight: 0.10

3.2.2 框架层指标

yaml 复制代码
framework_metrics:
  iteration_time:
    description: "单次迭代时间"
    unit: "milliseconds"
    weight: 0.20
    
  gradient_update_time:
    description: "梯度更新时间"
    unit: "milliseconds"
    weight: 0.10
    
  data_loading_time:
    description: "数据加载时间"
    unit: "milliseconds"
    weight: 0.10

3.3 性能指纹采集系统实现

3.3.1 数据采集架构

text 复制代码
+----------------+     +----------------+     +----------------+
|   GPU Metrics  |     | Framework      |     | Application    |
|   Collector    |     | Metrics        |     | Metrics        |
|   (NVML/DCGM)  |     | Collector      |     | Collector      |
+----------------+     +----------------+     +----------------+
        |                      |                      |
        +----------+-----------+----------+-----------+
                   |                      |
          +------------------+   +------------------+
          |   Metrics        |   |   Metadata       |
          |   Aggregator     |   |   Enricher       |
          +------------------+   +------------------+
                   |                      |
          +------------------+   +------------------+
          |   Performance    |   |   Storage        |
          |   Fingerprint    |   |   Backend        |
          |   Generator      |   |   (TSDB)         |
          +------------------+   +------------------+

3.3.2 指纹生成算法

python 复制代码
class PerformanceFingerprint:
    def __init__(self, config):
        self.metrics = {}
        self.weights = config['weights']
        self.baselines = config['baselines']
    
    def add_metric(self, name, value, timestamp):
        """添加指标数据"""
        self.metrics[name] = {
            'value': value,
            'timestamp': timestamp,
            'score': self.calculate_score(name, value)
        }
    
    def calculate_score(self, name, value):
        """计算指标得分"""
        baseline = self.baselines.get(name, {})
        expected = baseline.get('expected', 0)
        threshold = baseline.get('threshold', 0)
        
        if expected == 0:
            return 0
            
        deviation = abs(value - expected) / expected
        score = max(0, 100 - (deviation * 100))
        
        return score
    
    def generate_fingerprint(self):
        """生成性能指纹"""
        total_score = 0
        total_weight = 0
        
        fingerprint = {
            'timestamp': time.time(),
            'metrics': {},
            'anomalies': []
        }
        
        for name, data in self.metrics.items():
            weight = self.weights.get(name, 0)
            score = data['score']
            
            total_score += score * weight
            total_weight += weight
            
            fingerprint['metrics'][name] = {
                'value': data['value'],
                'score': score,
                'weight': weight
            }
            
            # 检测异常
            if score < 60:  # 低于60分视为异常
                fingerprint['anomalies'].append({
                    'metric': name,
                    'value': data['value'],
                    'score': score,
                    'severity': 'high' if score < 30 else 'medium'
                })
        
        fingerprint['overall_score'] = total_score / total_weight if total_weight > 0 else 0
        return fingerprint

3.3.3 实时监控与告警

python 复制代码
class PerformanceMonitor:
    def __init__(self, fingerprint_config, alert_rules):
        self.fingerprint_generator = PerformanceFingerprint(fingerprint_config)
        self.alert_rules = alert_rules
        self.history = deque(maxlen=1000)
    
    def process_metrics(self, metrics_batch):
        """处理指标批量数据"""
        for metric in metrics_batch:
            self.fingerprint_generator.add_metric(
                metric['name'], 
                metric['value'], 
                metric['timestamp']
            )
        
        fingerprint = self.fingerprint_generator.generate_fingerprint()
        self.history.append(fingerprint)
        
        # 检查告警
        alerts = self.check_alerts(fingerprint)
        if alerts:
            self.send_alerts(alerts)
        
        return fingerprint
    
    def check_alerts(self, fingerprint):
        """检查告警条件"""
        alerts = []
        
        # 检查总体分数告警
        if fingerprint['overall_score'] < self.alert_rules['overall_score_threshold']:
            alerts.append({
                'type': 'OVERALL_PERFORMANCE_DEGRADATION',
                'severity': 'critical',
                'score': fingerprint['overall_score'],
                'timestamp': fingerprint['timestamp']
            })
        
        # 检查单项指标告警
        for anomaly in fingerprint['anomalies']:
            if anomaly['severity'] == 'high':
                alerts.append({
                    'type': 'METRIC_ANOMALY',
                    'metric': anomaly['metric'],
                    'value': anomaly['value'],
                    'severity': 'high',
                    'timestamp': fingerprint['timestamp']
                })
        
        return alerts
    
    def send_alerts(self, alerts):
        """发送告警通知"""
        for alert in alerts:
            # 集成到现有的告警系统
            print(f"ALERT: {alert}")
            # 实际环境中可以发送邮件、短信、钉钉等通知

第四部分:全链路监控系统集成

4.1 系统架构设计

4.1.1 数据流架构

text 复制代码
+-------------+    +-------------+    +-------------+
|   GPU节点   |    |  训练框架   |    |  业务应用   |
|  指标采集   |    |  指标采集   |    |  指标采集   |
+-------------+    +-------------+    +-------------+
        |                |                |
        +--------+-------+-------+--------+
                 |               |
        +-------------------------------+
        |          指标聚合层            |
        |   (Fluentd/Logstash/Vector)   |
        +-------------------------------+
                 |               |
        +-------------------------------+
        |          流处理层              |
        |     (Flink/Spark Streaming)   |
        +-------------------------------+
                 |               |
        +-------------------------------+
        |          存储层                |
        |   (Prometheus/InfluxDB/TDengine) |
        +-------------------------------+
                 |               |
        +-------------------------------+
        |          分析层                |
        |   (性能指纹/关联分析/告警)    |
        +-------------------------------+
                 |               |
        +-------------------------------+
        |          可视化层              |
        |   (Grafana/Kibana)           |
        +-------------------------------+

4.1.2 关键技术选型
数据采集

  • GPU指标:DCGM、NVML、Prometheus DCGM Exporter
  • 框架指标:PyTorch Profiler、TensorFlow Profiler
  • 业务指标:自定义指标SDK

数据存储

  • 时序数据:TDengine、InfluxDB
  • 日志数据:Elasticsearch
  • 性能指纹:Redis、PostgreSQL

流处理

  • 实时分析:Flink、Spark Streaming
  • 复杂事件处理:Apache Flink CEP

4.2 关键集成代码示例

4.2.1 Prometheus DCGM Exporter配置

yaml 复制代码
# dcgm-exporter-config.yaml
metrics:
  - name: "dcgm_sm_activity"
    field: "DCGM_FI_PROF_SM_ACTIVE"
    type: "gauge"
    
  - name: "dcgm_memory_activity" 
    field: "DCGM_FI_PROF_DRAM_ACTIVE"
    type: "gauge"
    
  - name: "dcgm_tensor_activity"
    field: "DCGM_FI_PROF_PIPE_TENSOR_ACTIVE"
    type: "gauge"
    
  - name: "dcgm_fp64_activity"
    field: "DCGM_FI_PROF_PIPE_FP64_ACTIVE"
    type: "gauge"
    
  - name: "dcgm_fp32_activity"
    field: "DCGM_FI_PROF_PIPE_FP32_ACTIVE"
    type: "gauge"
    
  - name: "dcgm_fp16_activity"
    field: "DCGM_FI_PROF_PIPE_FP16_ACTIVE"
    type: "gauge"

4.2.2 基于Flink的实时处理

java 复制代码
public class GPUmetricsProcessor extends ProcessFunction<MetricEvent, PerformanceFingerprint> {
    
    private transient PerformanceFingerprint fingerprint;
    
    @Override
    public void open(Configuration parameters) {
        // 初始化性能指纹生成器
        fingerprint = new PerformanceFingerprint(loadConfig());
    }
    
    @Override
    public void processElement(MetricEvent event, Context ctx, Collector<PerformanceFingerprint> out) {
        // 处理单个指标事件
        fingerprint.addMetric(event.getName(), event.getValue(), event.getTimestamp());
        
        // 每分钟生成一次性能指纹
        if (shouldGenerateFingerprint()) {
            PerformanceFingerprint newFingerprint = fingerprint.generateFingerprint();
            out.collect(newFingerprint);
            fingerprint.reset();
        }
    }
    
    @Override
    public void onTimer(long timestamp, OnTimerContext ctx, Collector<PerformanceFingerprint> out) {
        // 定时生成性能指纹(防止数据稀疏)
        PerformanceFingerprint newFingerprint = fingerprint.generateFingerprint();
        out.collect(newFingerprint);
        fingerprint.reset();
    }
}

4.2.3 Grafana监控仪表板

json 复制代码
{
  "dashboard": {
    "title": "AI集群全链路监控",
    "panels": [
      {
        "title": "GPU利用率概览",
        "type": "stat",
        "targets": [
          {
            "expr": "avg(dcgm_gpu_utilization) by (host, gpu_id)",
            "legendFormat": "{{host}}-GPU{{gpu_id}}"
          }
        ]
      },
      {
        "title": "SM效率分析",
        "type": "heatmap",
        "targets": [
          {
            "expr": "dcgm_sm_efficiency",
            "legendFormat": "SM效率"
          }
        ]
      },
      {
        "title": "性能指纹得分",
        "type": "timeseries",
        "targets": [
          {
            "expr": "performance_fingerprint_score{job='training-job'}",
            "legendFormat": "总体得分"
          }
        ]
      }
    ]
  }
}

第五部分:实战案例与最佳实践

5.1 典型性能问题诊断

5.1.1 内存带宽瓶颈诊断
症状

  • GPU利用率高但SM效率低
  • 内存控制器利用率持续高位
  • 训练迭代时间波动大

诊断步骤

  • 检查dcgm_dram_activity指标
  • 分析内存访问模式
  • 验证batch size是否过大

解决方案

  • 使用梯度累积减少内存压力
  • 优化数据布局提高缓存命中率
  • 调整模型结构减少内存访问

5.1.2 Tensor Core未充分利用
症状

  • SM效率高但Tensor Core利用率低
  • FP16/FP32计算比例失衡
  • 模型无法达到理论性能

诊断步骤

  1. 检查dcgm_tensor_activity指标
  2. 验证模型操作是否支持Tensor Core
  3. 分析数据类型使用情况

解决方案

  • 确保使用适合Tensor Core的数据类型(FP16/BF16)
  • 调整模型层大小满足Tensor Core要求(矩阵维度为8的倍数)
  • 使用混合精度训练

5.2 性能优化最佳实践

5.2.1 监控配置优化

yaml 复制代码
# 优化的采集配置
collection_intervals:
  high_frequency_metrics: 100ms    # 关键性能指标
  medium_frequency_metrics: 1s     # 一般性能指标  
  low_frequency_metrics: 10s       # 状态指标

metric_groups:
  essential: ["sm_activity", "memory_activity", "tensor_activity"]
  detailed: ["fp64_activity", "fp32_activity", "fp16_activity"]
  diagnostic: ["pcie_traffic", "nvlink_traffic"]

5.2.2 告警策略配置

yaml 复制代码
alerting_rules:
  - alert: "SM效率低下"
    expr: "dcgm_sm_efficiency < 60"
    for: "5m"
    labels:
      severity: "warning"
    annotations:
      summary: "SM效率低于阈值"
      description: "GPU {{$labels.gpu_id}} SM效率为 {{$value}}%"
  
  - alert: "内存带宽瓶颈"
    expr: "dcgm_dram_activity > 85"
    for: "2m"
    labels:
      severity: "critical"
    annotations:
      summary: "内存带宽使用率过高"
      description: "GPU {{$labels.gpu_id}} 内存带宽使用率为 {{$value}}%"
  
  - alert: "性能指纹异常"
    expr: "performance_fingerprint_score < 70"
    for: "3m"
    labels:
      severity: "warning"
    annotations:
      summary: "任务性能异常"
      description: "任务 {{$labels.job_id}} 性能得分为 {{$value}}"

5.3 容量规划与成本优化

5.3.1 资源利用率分析

python 复制代码
def analyze_cluster_utilization(metrics_data, time_range):
    """
    分析集群资源利用率
    """
    utilization_stats = {}
    
    for gpu in metrics_data['gpus']:
        gpu_id = gpu['id']
        utilization_stats[gpu_id] = {
            'avg_utilization': calculate_average(gpu['utilization'], time_range),
            'peak_utilization': calculate_peak(gpu['utilization'], time_range),
            'idle_time': calculate_idle_time(gpu['utilization'], time_range),
            'cost_efficiency': calculate_cost_efficiency(gpu)
        }
    
    return utilization_stats

def generate_capacity_report(utilization_stats):
    """
    生成容量规划报告
    """
    report = {
        'underutilized_gpus': [],
        'overutilized_gpus': [],
        'recommendations': []
    }
    
    for gpu_id, stats in utilization_stats.items():
        if stats['avg_utilization'] < 30:
            report['underutilized_gpus'].append({
                'gpu_id': gpu_id,
                'utilization': stats['avg_utilization'],
                'suggestion': '考虑合并工作负载或降配'
            })
        elif stats['avg_utilization'] > 85:
            report['overutilized_gpus'].append({
                'gpu_id': gpu_id, 
                'utilization': stats['avg_utilization'],
                'suggestion': '需要扩容或优化工作负载'
            })
    
    return report

结论

构建AI集群全链路监控体系是一个系统工程,需要从GPU微架构指标采集开始,逐步构建SM利用率分析能力,最终形成训练任务的性能指纹。这套体系不仅能够帮助运维团队实时掌握集群状态,更能为研发人员提供深度的性能洞察,为管理者提供数据驱动的决策支持。

关键成功因素包括:

  1. 多层次指标采集:覆盖硬件、框架、业务各个层面
  2. 实时处理能力:及时发现和响应性能问题
  3. 智能关联分析:将底层指标与业务表现相关联
  4. 可行动洞察:提供具体的优化建议而不仅仅是告警

随着AI模型复杂度的不断提升和计算资源的持续昂贵,全链路监控将从不错的选择变为必备的基础设施。通过本文介绍的方法论和实践经验,您应该能够构建起适合自己业务场景的AI集群监控体系,充分发挥昂贵计算资源的潜力,加速AI研发和创新进程。


点击 "AladdinEdu,同学们用得起的【H卡】算力平台",H卡级别算力80G大显存按量计费灵活弹性顶级配置学生更享专属优惠

相关推荐
硬汉嵌入式18 小时前
专为 MATLAB 优化的 AI 助手MATLAB Copilot
人工智能·matlab·copilot
奋进的电子工程师18 小时前
如何实现开源组件的安全与合规治理?
安全·开源·代码规范·设计规范·代码复审
小坏讲微服务19 小时前
Spring Cloud Alibaba整合SkyWalking的监控完整使用
java·微服务·架构·springcloud·监控·skywalking·java微服务
北京盛世宏博19 小时前
如何利用技术手段来甄选一套档案馆库房安全温湿度监控系统
服务器·网络·人工智能·选择·档案温湿度
搞科研的小刘选手19 小时前
【EI稳定】检索第六届大数据经济与信息化管理国际学术会议(BDEIM 2025)
大数据·人工智能·经济
半吊子全栈工匠19 小时前
软件产品的10个UI设计技巧及AI 辅助
人工智能·ui
机器之心20 小时前
真机RL!最强VLA模型π*0.6来了,机器人在办公室开起咖啡厅
人工智能·openai
机器之心20 小时前
马斯克Grok 4.1低调发布!通用能力碾压其他一切模型
人工智能·openai
一水鉴天20 小时前
整体设计 全面梳理复盘 之39 生态工具链 到顶级表征及其完全公理化
大数据·人工智能·算法
小和尚同志20 小时前
本地 AI Code Review 探索及落地
人工智能·aigc