Bryan Blog

个人分享 但愿各位看官喜欢

FATE Board 执行流程探索

FATE Board Execution Process Exploration

背景介绍 FATE Board 是 FATE 提供的一个工程,用于给 FATE 提供可视化能力,方便在联邦学习训练中实时查看执行状态,更好地定位执行中遇到的问题。 查看 FATE 架构可以看到 FATE Board 是建立在 MySQL 和 FATE Flow Server 的基础上的,看起来数据来源是来自于这两者。FATE Flow Server 在之前的文章 中已经介绍过,FATE 中...

基于 Pre-commit 的代码风格统一实践

Unified Code Style Practice Based on Pre-commit

背景信息 统一代码风格首先需要定义参照的规范,每个团队可能会有自己的规范,我们选择的规范是 yapf + mypy + isort,如果保证所有的研发人员都遵循相关规范呢? 鼓励 IDE 中对应的插件的安装,通过直接对应的插件,在编写代码阶段就能实时发现不符合规范的情况,修改成本最低; 通过 Pre-commit 在创建 commit 时执行检查,并进行必要的自动格式化,提供统一...

基于 OpenAPI 的 Web 页面自动渲染实践

Practice of Automatic Rendering of Web Pages Based on OpenAPI

背景信息 最近接手的项目中遇到一个新的需求,需要对原有的机器学习相关的接口进行切换,因为机器学习算法训练包含的参数比较多,结构也比较复杂,参数之前存在复杂的动态依赖关系。更麻烦的问题在于前端 Web 页面是基于接口结构与字段类型进行渲染的,同时为了支持基于接口渲染出前端页面,前人使用的技术方案如下所示: 可以看到基于接口需要去管理后台进行参数的配置,管理后台为了前端逻辑的展示的需要,定...

FATE Flow 源码解析 - 日志输出机制

FATE Flow source code analysis - log mechanism

背景介绍 在 之前的文章 中介绍了 FATE 的作业处理流程,在实际的使用过程中,为了查找执行中的异常,需要借助运行生成的日志,但是 FATE-Flow 包含的流程比较复杂,对应的日志也很多,而且分散在不同的文件中,在这篇文章中就对 FATE-Flow 的日志机制进行梳理,帮助大家了解 Python 服务中实现一个更加灵活的日志机制 logging 机制 FATE-Flow 中日志主要基于...

FATE Flow 源码解析 - 资源分配流程

FATE Flow source code analysis - resource allocation process

背景介绍 在 上一篇文章 中介绍了 FATE 的作业处理流程,对于资源管理没有深入介绍,本篇文章就是来补充相关细节。 众所周知,FATE 是一个联邦学习框架,涉及了多个参与方(FATE 中叫站点)进行模型的训练,而各个参与方的训练过程都需要使用 CPU 资源和内存资源,因此在作业执行前需要提前先申请好必要的资源,才能避免在执行中避免因为资源不足而导致执行失败。 而 FATE 中单个作业会包...

FATE Flow 源码解析 - 作业提交处理流程

FATE Flow source code analysis - task submission process

背景介绍 FATE 是隐私计算中最有名的开源项目了,从 star 的数量上来看也可以看出来。截止 2023 年 3 月共收获 4.9k 个 star,但是 FATE 一直被认为代码框架复杂,难以理解,作为一个相关的从业者,后续会持续对 FATE 项目的源码进行解析,方便对隐私计算感兴趣的后来者提供一点点帮助。 本文主要基于 FATE-Flow 2022 年 12 月发布的版本 v1.10...

基于 Grpc interceptors 的请求跟踪探索

Exploration of request tracking based on grpc interceptors

背景信息 最终参与一个涉及比较大量 gRPC 服务调用的项目,内部调用链路比较复杂,追踪 bug 涉及的信息链路也很长,导致追踪问题比较困难。今天在跟踪特定问题时,发现部分链路日志缺失,而且执行链路比较难追踪,于是想到之前 Web 服务中为了方便异常追踪,会统一注册,将所有的请求与返回都打印出来,并通过唯一的 id 去串联完整处理链路,通过这种方式执行链路会变得特别清晰,调试问题也变得很方便...

基于 cookiecutter 的 python 项目模板

Python project template based on cookiecutter

Cookiecutter 介绍 使用 Python 这种动态语言进行 web 开发,团队中经常会遇到的问题就是代码的质量比较难控制。Python 语言本身灵活性比较高,不加控制的情况下代码质量可能最后很难维护。而且代码的各方面的标准,比如提示的 lint,代码格式化等等如果不加规范,不同开发者的协作也会比较困难。因此从公司角度来看,一个统一的代码规范是很有必要的。 在 Python 的开...

Python 中的时区问题

Timezone problem in python

问题背景 使用 Python 进行了许久的开发,一直没有踩到时区的坑,最近新的业务中引入了比较多的服务,而且使用 grpc 进行数据通讯,不幸踩到了时区的坑,果然偷的懒最终还是会有报应的,于是梳理下对应的时区问题,同时发现系统中之前的数据库 Mongo 中的时区问题,一起整理如下。 基础概念 几个时间概念 首先是几个常见的时间概念 GMT 时间:格林威治时间,基准时间 ...

Poetry 包管理

Python package management by poetry

背景介绍 在 Python 的包管理中,一直没有一个完善的包管理工具,很长一阵子,项目依赖都是通过 requirements.txt 定义必要的依赖,而使用 requirements.txt 不仅繁琐,而且比较不方便维护,甚至没有办法维护直接依赖和间接依赖,虽然后面有 pip-tools 去提供一些便利,但是包管理依旧不方便。 哪里有不便,哪里就有人提供解决方案。大佬 Kenneth R...