Skip to main content

ML FAQ

Thoughts

  • ML 最重要的是数据
  • CVAT 目前用下来是标注 图片/视频 最好的用具
    • 一定要注意 Tracker 插帧的问题
    • 尽量使用快捷键

Hardware

DeviceArchRAMCUDATensorRTFP64FP32FP16INT8INT4TensorTF32 TensorFP16 Tensor
NVIDIA L4Ada Lovelace24GB30.3 TFLOPS120 TFLOPS242 TFLOPS
NVIDIA Tesla T4Turing16GB2,560320Mix 65 TFLOPS8.1 TFLOPS130 TOPS260 TOPS
NVIDIA GeForce RTX 4090Ada Lovelace24GB16,3841,321
NVIDIA Quadro RTX 6000Turing24GB4,6085767216.3 TFLOPS130.5 TFLOPS
NVIDIA Tesla V100Volta32/16G HBM27 TFLOPS14 TFLOPS62 TOPS
NVIDIA A100 PCIe40/80G HBM2e9.7 TFLOPS19.5 TFLOPS156 TFPLOPS312 TFLOPS
NVIDIA H100 PCIe80G26 TFLOPS51 TFLOPS756.5 TFLOPS1,513 TFLOPS
NVIDIA Tesla P100 PCIePascal35844.7 TFLOPS9.3 TFLOPS18.7 TFLOPS
NVIDIA Tesla P100 SXMPascal35845.3 TFLOPS10.6 TFLOPS21.2 TFLOPS

SXM vs PCIe

  • SXM - Server eXternal Module
    • 专有接口、更高带宽、更高功率限制、高效散热设计
    • 应用场景 - 数据中心、高性能计算、AI 训练
    • 如 NVIDIA Tesla V100, A100
  • PCIe - Peripheral Component Interconnect Express
    • 通用接口、更广泛的应用、更多的设备支持
    • 应用场景 - 工作站、服务器、桌面
    • 如 NVIDIA GeForce, Quadro, Tesla

TensorFlow vs PyTorch

推荐 PyTorch

VAE vs GAN

  • GAN
    • generator + discriminator
    • adversarial training
    • 生成高质量、真实的图片、数据
    • 图片生成、图像到图像的转换、超分辨率
    • 弱点: 训练不稳定、模式崩溃、模式坍塌;需要小心的调参
  • VAE
    • encoder + decoder, probabilistic framework
    • input data -> latent space - 潜在空间/隐空间 - 压缩后的数据/PCA表示
    • 训练:
      • 优化一个损失函数来进行训练,这个损失函数包含重构损失(确保输出与输入相似)和正则化项(确保潜在空间具有一定的结构,通常为高斯分布)。
      • 这个正则化项促使潜在空间连续且平滑,从而使得从中采样新的数据点变得容易。
      • KL-divergence
    • 优点: 生成的数据更加平滑、连续;更容易训练;更容易生成新数据
    • 缺点: 生成的数据质量不如 GAN
    • reconstruction loss, regularization term

frames

# -q:v 1-31 - 16 为中等,1 为最好,31 为最差
ffmpeg -i video.mp4 -start_number 0 -b:v 10000k -vsync 0 -an -y -q:v 16 images/%d.jpg

# 推荐 - 增加视频名称前缀,多个视频可合并,质量调高一点
ffmpeg -i v2.mp4 -start_number 0 -b:v 10000k -vsync 0 -an -y -q:v 4 v2/v2-frame_%06d.jpg

ImportError: cannot import name 'packaging' from 'pkg_resources' (/usr/local/lib/python3.10/dist-packages/pkg_resources/init.py)

  • setuptools 70 的问题
python -m pip install setuptools==69.5.1
ModuleNotFoundError: No module named 'setuptools'
pyproject.toml
[tool.poetry.dependencies]
setuptools = { version = "<70" }

ModuleNotFoundError: No module named 'packaging'

pip install wheel

cannot import name 'is_flash_attn_greater_or_equal_2_10' from 'transformers.utils'

Could not load library libcudnn_cnn_train.so.8

  • /opt/conda/lib/python3.10/site-packages/nvidia/cudnn/lib/libcudnn_cnn_train.so.8
  • /opt/conda/lib/python3.10/site-packages/torch/lib
  • /usr/local/cuda/lib64
Could not load library libcudnn_cnn_train.so.8. Error: /usr/local/cuda/lib64/libcudnn_cnn_train.so.8: undefined symbol: _ZN5cudnn3cnn5infer22queryClusterPropertiesERPhS3_, version libcudnn_cnn_infer.so.8
ldd /opt/conda/lib/python3.10/site-packages/nvidia/cudnn/lib/libcudnn_cnn_train.so.8
ldd /usr/local/cuda/lib64/libcudnn_cnn_train.so.8

# 修改后就可以了
LD_LIBRARY_PATH=/opt/conda/lib/python3.10/site-packages/nvidia/cudnn/lib/:$LD_LIBRARY_PATH yolo

#LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/conda/lib/python3.10/site-packages/torch/lib

Placeholder shape mismatches (expected 1 vs got tensorData with 2240) at dimIdx = 0

transforms.Normalize

# 基于 ImageNet 的均值和标准差
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])

TqdmWarning: IProgress not found. Please update jupyter and ipywidgets.

ImportError: Using low_cpu_mem_usage=True or a device_map requires Accelerate: pip install accelerate

安装了 accelerate 需要重启 notebook kernel

You current version of autoawq does not support module quantization skipping

pip install autoawq

开发框架 vs 推理框架

  • 定义
    • 开发框架(训练/研究):PyTorch、TensorFlow、JAX。强调易用性、调试体验、自动求导、分布式训练与算子生态。
    • 推理框架(部署/服务):TensorRT、ONNX Runtime、OpenVINO、TFLite、Core ML、TVM、Torch-TensorRT、vLLM/FasterTransformer(LLM 方向)。强调低延迟、高吞吐、低内存与跨平台部署。
  • 计算图与编译
    • 开发:动态图为主(eager),也支持图与编译(TorchScript、torch.compile/Inductor、TF Graph)。
    • 推理:静态图/AOT 编译为主;算子融合、常量折叠、布局/精度变换、kernel auto-tuning、batching。
  • 精度与量化
    • 开发:以 FP32/FP16/BF16 训练为主,支持 QAT。
    • 推理:PTQ/QAT 常见;INT8/FP8/INT4(硬件相关);需校准/误差评估以平衡精度与性能。
  • 硬件/后端
    • 开发:CPU、CUDA、ROCm、MPS、TPU(TF/JAX)。
    • 推理:TensorRT/cuDNN(NVIDIA)、ONNX Runtime + CUDA/DirectML/XNNPACK、OpenVINO(CPU/iGPU/VPU)、TFLite(移动/边缘)、Core ML(Apple)、TVM(多后端)。
  • 模型兼容与导出
    • PyTorch -> ONNX -> ONNX Runtime/TensorRT
    • PyTorch -> torch.compile/Inductor 或 TorchScript -> LibTorch/TorchServe
    • TensorFlow/Keras -> SavedModel -> TF-TRT/TFLite/TF Serving
    • JAX -> XLA/StableHLO -> TPU/CPU/GPU 后端
    • LLM 方向:PyTorch -> TensorRT-LLM / FasterTransformer / vLLM(KV cache、分页注意力、动态批处理)
  • 常见工作流
    • 训练:开发框架建模/训练/验证;保存 checkpoint(.pt/.pth/.ckpt/safetensors)。
    • 导出:冻结与转换(torch.onnx.export、torch_tensorrt、tf.saved_model、tflite_converter)。
    • 优化:剪枝、蒸馏、量化、形状固定、operator 替换、图优化;LLM 使用 KV cache、speculative decoding。
    • 部署:推理引擎加载与服务编排(Triton Inference Server、TF Serving、FastAPI、vLLM),结合动态/静态批处理与并发。
  • 优缺点速览
    • 开发框架:灵活易迭代、生态丰富;但推理性能/内存占用通常不如专用引擎。
    • 推理框架:低延迟/高吞吐/低内存;但导出/算子覆盖/自定义算子成本与调试难度更高。
  • 实践要点
    • 约束模型以便导出(避免非确定性/动态控制流/不支持的自定义算子)。
    • 做数值对齐测试(前后端同输入对比误差),再逐步应用量化与融合。
    • 针对场景选择后端:数据中心(TensorRT/ONNX Runtime)、CPU/边缘(OpenVINO/TFLite/XNNPACK)、Apple 端侧(Core ML)、多硬件(TVM)。
  • 参考