Author published on 简介 一个音频转文本的模型 https://github.com/openai/whisper
依赖 python ffmpeg 命令行使用 验证GPU 在venv环境下 输入whisper -h
–device # 如果默认是cpu 则证明cuda安装失败
# 这样也能验证cuda是否安装了 python -c "import torch; print(torch.version.cuda)" 重装torch gpu版本
# 卸载纯cpu版 pip uninstall torch # clean cache pip cache purge # copy from https://pytorch.org/get-started/locally/ pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 再次验证 whisper -h
–device # 如果默认是cuda 则证明成功
运行demo
whisper {vocieFile} --model large-v2 --model_dir {modelPath} \ --ourput_dir {outputDir} --output_format txt --device cuda --language Chinese 界面版 界面版 https://github.
Author published on 简介 旨在个人快速回忆Stable Diffusion相关关系
Stable Diffusion 是一个深度学习,文转图模型.
Stable Diffusion web UI 即面向用户提供界面操作工具, 链接为
https://github.com/AUTOMATIC1111/stable-diffusion-webui
其中该界面为英语,支持汉化插件
https://github.com/VinsonLaro/stable-diffusion-webui-chinese
PyTorch 官网 https://pytorch.org/ 是一个深度学习的框架
我的安装选择
OS: Windows package: pip language: python compute Platform: CUDA 教程 https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki
启动 下载完web UI后,运行webui-user.bat即可
在运行过程避免不了报错,很考验python debug能力。
初始化
设置webui-user.bat参数
set PYTHON= #python文件路径 set GIT= # git文件路径 set VENV_DIR= # venv目录 set COMMANDLINE_ARGS=--xformers # 启动参数 将python,git的bin path 加入系统环境变量下的path。
另外确保安装了Microsoft Visual C++ Redistributable vc_redist.x64.exe
安装过程需要网络稳定,需要下载很多pkg
缓存冲突解决
直接删除./venv/lib/site-packages/下冲突的包,重新运行脚本.
或者命令行搞定
# 卸载具体包 pip uninstall 具体包 # clean cache pip cache purge 模型位置
Author published on 目的 Go Kitex提供了自定义模板生成代码,使用起来挺方便的.
有望改造成支持公司内部go代码生成工具
https://www.cloudwego.io/zh/docs/kitex/tutorials/code-gen/custom_tpl/ 处理要素 cli工具整合 这里推荐2个包,封装了cli和参数解析
https://github.com/spf13/cobra https://github.com/spf13/pflag 基本数据对象定义 提供了文件生成时的数据渲染对象 PackageInfo
模板渲染使用html/template语法
额外参数在context中解析 cli传递参数过多会带来复杂性,需要额外的.json文件数据提供在上下文中解析.
多模板文件定义 通过指定目录加载其下所有模板文件
模板文件格式为.yaml
生成的文件路径也支持变量解析.
其中能独立定义新增代码部分
统一入口 初始化和更新行为都为同一命令,减少处理成本
额外点 多任务并行处理文件生成 跨平台支持
Author published on 设计考虑 以下是个人的建议,随便看看了解下
context支持 一般入参数context是第一个参数,提供了timeout机制
logger接口定义 在组件的初始化时,将使用方的日志实例进行接口约束,
要求实现其debug,error级别method.
可以参考gorm的logger设计
hook注入 方便使用方对metric的收集,可以参考redis hook设计
布局了解 这里只是提供参考建议
go官方 https://github.com/golang-standards/project-layout 知道internal目录对内部系统的保护
链接 https://go.dev/doc/go1.4#internalpackages 跨平台支持 查看支持平台
go tool dist list 条件编译约束
//go:build (linux && 386) || (darwin && !cgo) https://pkg.go.dev/cmd/go#hdr-Build_constraints
linters集成 https://golangci-lint.run/ 提高代码质量
版本约束 具体查看 https://go.dev/ref/mod#versions
依赖注入 https://github.com/google/wire
使得依赖关系变得整洁
参数配置 Functional Options Pattern,代码优雅
IDL https://protobuf.dev/ 利用protobuf提供接口和配置的定义.
验证项目得分 https://goreportcard.com/
评估项含
gofmt go vet go lint gocyclo
Author published on 总体架构分层
接入层,无状态 逻辑层 存储层 这里是参考了陌陌设计
连接层 这里有2种方案选择
WebSocket MQTT 关于MQTT,有EMQX中间件.
消息上线可以走HTTP接口,即客户端发给服务端消息
消息下行可以走EMQX订阅主题,即服务端推送消息给客户端
连接层属于无状态,支持水平扩展.
逻辑层 通用消息格式定制
以及业务路由分发决策
设计规则
不丢消息 需要业务ACK机制
消息去重 服务端与客户端都需要做到
时序一致性 可以用snowflake算法.
利用局部性原理减少id生成器压力,有利于水平扩展
缓存设计 由于实时系统,基本上有一层cache,类似内核系统的buffer。
多级缓冲,面向c端场景的话一般链路不会太长,而且要考虑数据回种,分布式一致性挑战.
大概local cache -> redis (读写分离)-> database(读写分离)
其他考虑场景 接入APP推送 接入风控 数据多端同步 多条消息打包与压缩格式设计 万人大群的数据扇出 明星突发性空降某频道 数据埋点监控 系统自动扩容 存储层 离线消息 如果需求量不大,Mysql即可以解决.
聊天应用的读写比例大概是1:1.
数据库 Cassandra
Discord公司有在用.偏向AP场景
HBase
Facebook公司有在用.偏向CP场景
个人想法 前期用Mysql,但是封装一层接口,为后期数据库迁移作准备.
大数据库选择要还看云数据库商支持程度,说不定还有其他云产品合适.
对象存储 minio
消息队列 rabbitMQ比较适合业务,
但是追求高吞吐的kafka,自己必须封装多一层机制来保证业务的一致性.
后续有的话再更新
Author published on 记录下自己使用下来的go微服务框架,kratos go-zero kitex.
kratos bilibili公司出品的框架,当年公司内部代码泄漏,现在开源优化已经到了v2版本.
参考了DDD,Clean Architecture 设计理念.
项目结构清晰,每一层级的角色定位清晰,没有全局变量污染,还引入了wire进行依赖倒置.
data层暴露了clean up函数对资源句柄进行回收.
框架层与业务层解耦,框架生命周期感知清晰.
组件开放接口设计,扩展性强
服务使用的是GRPC+Protocol Buffer, 同一服务进程下暴露了GRPC端口和HTTP端口.
HTTP是通过protoc组件protoc-gen-go-http反射路由到同一RPC方法.
框架整体设计比较轻量,适合自己组合微服务方案.
总结 适合团队有架构组的人使用,前期需要自己组合方案,整合组件.后期基本完善,使用体验良好. HTTP层建议使用gin框架,因为protoc-gen-go-http适合开发阶段调试用,重度需求满足不了,自己做适配一路都是新坑.
Go-zero 一个公司CTO主推项目,加入了CNCF.
HTTP单独部署一个项目,路由方法定义通过编写.api后缀文件(Go-zero定义的语法)实现.
他们的设计理念是实用性.
总结 生产上能用。对于定制化业务,直接fork他们官方的cli工具,然后公司内部修改维护该仓库.
Kitex 字节跳动公司的开源项目,分RPC框架Kitex和HTTP框架Hertz.
2个框架是2个团队的产物,设计规范不一致.
框架替换原有了go/net设计,实现高性能.(生产稳定性需要查阅官方资料验证)
IDL支持Thrift,官方对Thrift的支持度很高,因为他们内部使用Thrift,但也支持Protobuf.
他们的设计理念是高性能
总结 Kitex只是cloudwego组织下子项目,Thrift不是特别吸引我, 希望cloudwego/netpoll能封装成一个适配性高组件.