Python for MLOps - 第一阶段学习笔记

Python for MLOps - 第一阶段学习笔记

🎯 学习目标

• 巩固 Python 高级语法

• 掌握配置管理与工程化组织方式

• 构建可维护、可配置、具备日志能力的训练脚本框架


✅ 学习模块总结

1. 类型注解(typing)

• 关键类型:List, Dict, Optional, Union, Callable

• 好处:提升代码可读性、支持 IDE 提示和静态检查(如 mypy)

示例:

python 复制代码
from typing import List, Dict, Union

def square_all(numbers: List[int]) -> List[int]:
    return [n**2 for n in numbers]

def get_config() -> Dict[str, Union[float, int]]:
    return {"lr": 0.01, "epochs": 10}

2. 数据类(dataclasses)

• 用 @dataclass 快速定义带默认值的数据结构

• 自动生成 init , repr 等方法

示例:

python 复制代码
from dataclasses import dataclass

@dataclass
class TrainConfig:
    lr: float
    epochs: int
    batch_size: int = 32
    device: str = "cuda"

3. YAML 配置加载(pyyaml)

• 用于从 .yaml 文件中读取训练参数配置

• 搭配 dataclass 实现结构化配置

示例:

python 复制代码
import yaml
from pathlib import Path

def load_config(path: Path) -> TrainConfig:
    with open(path, 'r') as f:
        data = yaml.safe_load(f)
    return TrainConfig(**data)

4. 命令行参数(argparse)

• 支持运行时覆盖 YAML 配置

• 常用于快速试验不同参数组合

示例:

ini 复制代码
from argparse import ArgumentParser

parser = ArgumentParser()
parser.add_argument("--config", default="configs/config.yaml")
parser.add_argument("--lr", type=float)
parser.add_argument("--device", type=str)
args = parser.parse_args()

5. 日志记录(logging)

• 替代 print,可输出到终端和日志文件

• 支持日志格式统一、自动保存训练信息

示例:

ini 复制代码
import logging

def setup_logger(log_file: Path = None) -> logging.Logger:
    logger = logging.getLogger("uvlearn")
    logger.setLevel(logging.INFO)
    if not logger.handlers:
        ch = logging.StreamHandler()
        logger.addHandler(ch)
        if log_file:
            fh = logging.FileHandler(log_file, mode='w')
            logger.addHandler(fh)
    return logger

6. 项目结构组织

bash 复制代码
uvlearn/
├── configs/           # 存放 YAML 配置
│   └── config.yaml
├── src/
│   ├── config.py      # 配置结构与加载逻辑
│   ├── trainer.py     # 训练逻辑(可模拟/使用 PyTorch)
│   └── utils.py       # 通用工具(日志、contextlib等)
└── train_entry.py     # 项目入口

7. pathlib 的使用

• 用 / 拼接路径

• 可跨平台,简洁直观

示例:

ini 复制代码
from pathlib import Path
log_file = Path("logs") / "train.log"
log_file.parent.mkdir(exist_ok=True)

8. contextlib.contextmanager

• 用函数实现 with 语法的资源管理

• 避免忘记关闭资源或释放连接

示例:

python 复制代码
from contextlib import contextmanager

@contextmanager
def demo_resource(name="默认资源"):
    print(f"[{name}] 资源准备")
    try:
        yield f"{name} 使用中"
    finally:
        print(f"[{name}] 资源清理完成")

📝 明日测验预告

我将准备一道综合题,考察你对以下内容的掌握:

• 类型注解

• dataclass 配置

• argparse 覆盖

• YAML 加载

• 日志输出

• contextmanager 使用

题型风格为"动手补全/分析代码",你会喜欢的 😄

相关推荐
databook9 分钟前
收上来一堆 Excel,怎么保证没改错
python·数据分析
2601_9679873741 分钟前
Python 教程:默认字典(defaultdict)全维度深度指南
python·性能优化·数据处理·collections·defaultdict
鱼听禅1 小时前
Ubuntu安装YOLOv8进行菌落识别训练
linux·python·yolo·ubuntu
ZhengEnCi1 小时前
Agent 查不出代码 Bug 怎么办:一份带时间戳的调试日志与读日志排查流程
python·ai编程
威哥爱编程2 小时前
模拟面试智能体开发实战 05:给面试官接上题库和检索,题目结构化、大纲可溯源,AI 不再凭印象出题
python·agent·harmonyos
威哥爱编程2 小时前
模拟面试智能体开发实战 06:答得好怎么追问、答得错怎么点破,追问引擎让面试官会深挖会纠错
python·agent·harmonyos
codists3 小时前
《crafting interpreters》阅读笔记:4.6.2
python
2601_967979123 小时前
机器学习必修课:经典算法与Python实战
python·算法·机器学习·实战·课程
cpolar技术支持3 小时前
listen(5) 只排得住 5 个连接:第 6 个客户端卡在 connect 超时,进程活着端口却显示假活不放行
python·socket·tcp·cpolar·故障排查
梯度下降者4 小时前
我校学子斩获 2025 全国高新技术竞赛 Python 赛道全国一等奖
python·教育·竞赛·信息技术·人才培养