C++高性能并行编程与优化 - 课件 - 性能优化之无分支编程 Branchless Programming否有点因噎废食?所以现在的 CPU 都有分支预测的能力。举例来说:你每天都执行刚刚 说的那个“早间活动”的任务清单。你发现“如果烧开水被烫伤”这件事似乎从来没发生过,于 是你渐渐意识到,被烫伤是个小概率事件,所以你“预判”到今天应该也不会发生意外,不再 等待烧完开水才开始刷牙,而是针对性地为“没烫伤”的那个剧本优化。把刷牙、看比站和烧 开水同时进行,但刷牙、看比站在烧完开水前都处于“虚”的状态,也就是虽然在做但是不写 吃饭 看比站 拉粑粑 5 5 10 20 刷牙 吃饭 看比站 拉粑粑 5 10 20 洗脸 烧开水 5 5 没烫伤 去医院 10 烫伤了 去医院 10 烫伤了 多次训练 现代 CPU 流水线如何应付跳转指令:分支预测 • 假如有分支 A 和分支 B ,一开始 CPU 不确定会执行哪一条,会两条都预先执行(只计算 出中间结果,先不写回内存),等到了跳转指令(烧开水)处确定了要走分支 的算力)。这就是说 CPU 第一次遇见一个分支时,两个分支都会被预执行 。 • 同一段程序被多次执行后,如果每次都是分支 A ,下一次 CPU 就会总结经验,预判到下 一次应该也是分支 A ,并且把 90% 的流水线用于预先执行分支 A 的剧本, 10% 的流水 线用于预先执行分支 B 。如果预判成功,的确走了分支 A ,那么只会浪费 10% 的算力; 如果预判失败,最后走了分支 B ,那就不得不把预先执行分支0 码力 | 47 页 | 8.45 MB | 1 年前3
夏歌-使用Rust构建LLM应用第三届中国 Rust 开发者大会 使用 Rust 构建 LLM 应用 夏歌 SECTION TITLE SECTION TITLE 我们能不能直接用 Rust • 训练 • 推理 • AI 应用相关的工具 • WASI-NN spec • WasmEdge 已经支持 Pytorch 、 TensorFlow Lite • WASI-NN 2.0 比如 Langchain Rewrite Telegram 机器人 当 Telegram 收到 规定好的 Slash 开头的 telegram command ,就预启动不同的 Prompt "0.1.0" 基于 ChatGPT 的 Telegram 机器人 当收到消息的时候,就按照预 设的 system_prompt 使用 GPT3.5 调用 OpenAI , 并把结果返回。 "0.1.0" 基于 ChatGPT0 码力 | 36 页 | 38.31 MB | 1 年前3
GPU Resource Management On JDOSKubeflow 的机器学习训练服务 3.模型管理和模型 Serving 服务 Experiment Training Serving 均基于容器,不对业务方直接提供 GPU 物理机 GPU 实验 JDOS 常规的容器服务 ,使用 gpu 的 zone , 自行设定相应的镜像即 可,有完善的周边服务 训练服务 • 提供基于 kubeflow 的分布式训练方案 – 界面化操作,用户提供代码地址和执行命令即可 自制存储插件支持分布式文件系统存储用户数据 – 支持官方镜像,不需要 JDOS 提前协助制作镜像 – 提供 tensorboard 作为训练监控实时查看训练状态 – 用户训练完成后释放 GPU 资源,提高 GPU 利用率 – Job 调度 (部门 quota 限制 + 优先级) • 创建训练 – 用户选择集群提供代码地址和执行命令即可 – 选择所用框架(镜像):支持官方,亦可自制 (提供 dockerfile 可以选择是否监控训练,提供 tensorboard 任务列表 可以指定 git 的 commit-id 发起任务 任务详情 可以查看具体的容器列表,以及查看容器的日志和事件 Serving 服务 提供统一便捷的 Serving 服务,只需用户指定模型,即可提供 grpc 和 rest 服务,同时使用 GPU 复用 +HPA 提高 GPU 利用率 创建 Serving 与训练集成 • 用户只需要简单选择机房和0 码力 | 11 页 | 13.40 MB | 1 年前3
新一代分布式高性能图数据库的构建 - 沈游人计算某个事件在关联的企业、个人 之间的传递过程和传递概率 图深度学习及其应用场景 图嵌入 • 将高维的图信息映射到低维向量中 • 通过图嵌入将客户关系表示为低维向量,可以结合其 他客户行为特征进行机器学习训练 图卷积神经网络 • 对图结构数据进行卷积计算 • 通过已有的企业数据,通过 GCN 进行半监督学习和分 类,预测企业的违约概率 传统的关系型数据库的存储方式丢失了事物之间的关系信息 Relational 对于常用算法,跳过固定的编程模型,分 别设计最佳的计算方案 • 例如我们自研的 node2vec 采样算法比现 有技术快了 1 个数量级 海致图计算平台特点 AtlasML 极致的性能 • 支持 CPU/GPU 等异构设备训练 • 特殊设计的高性能图算子库 丰富的算法库 • 内置多种 20+ 个 GNN 算法 • 支持同构图 / 异构图 / 属性图 客户的信任 • 上线某银行反欺诈场景 业务效果提升 10%+0 码力 | 38 页 | 24.68 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 07 深入浅出访存优化次连续的读 取, 16 次结束后就会跳跃一段,然后继续连续的 读取。这会导致 CPU 预取机制失效,无法预测下 一次要读哪里,等发现跳跃时已经来不及了,从而 计算的延迟无法隐藏。 如果每个属性都要访问到,那还是 AOS 比较好( AOSOA 也不赖哦) 这是因为使用 SOA 会让 CPU 不得不同时维护很多条预取赛道( mc_x, mc_y, mc_z ),当赛 道多了以后每一条赛道的长度就变短 mc ),这样同样的经费(缓存容量)能铺出的赛道(预 取)就更长,从而 CPU 有更长的周转时间来隐藏他内部计算的延迟。所以本案例中 AOS 比 SOA 好。 AOS 、 SOA 、 AOSOA 哪家强:结论 • 如果几个属性几乎总是同时一起用的,比如位置矢量 pos 的 xyz 分量,可 能都是同时读取同时修改的,这时用 AOS ,减轻预取压力。 • 如果几个属性有时只用到其中几个,不一定同时写入,比如 鑫磊最喜欢 AOSOA :在高层保持 AOS 的统一索引,底层又享受 SOA 带来的矢量化 和缓存行预取等好处……就是随机索引比较麻烦。 结构体剥离: https://blog.csdn.net/qq_36287943/article/details/103601176 第 3 章:预取与直写 顺序访问与随机访问 • 随机访问的效率比顺序访问低的多。 • 其中一个原因当然是:随机访问只会访问到其中一个0 码力 | 147 页 | 18.88 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 01 学 C++ 从 CMake 学起libigl/libigl - 各种图形学算法大合集 fmt - 使用这个神奇的格式化库 • fmt::format 的用法和 Python 的 str.format 大致相似: CMake - 引用系统中预安装的第三方库 • 可以通过 find_package 命令寻找系统中的包 / 库: • find_package(fmt REQUIRED) • target_link_libraries(myexec0 码力 | 32 页 | 11.40 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 10 从稀疏数据结构到量化数据类型(inactive) 。 这就是稀疏的好处,按需分配,自动扩容。 分块则是利用了我们存储的数据常常有着空间局域性的特点,减轻哈希表的压 力,同时在每个块内部也可以快乐地 SIMD 矢量化, CPU 自动预取之类的。 第 2 章:位运算 稀疏的好处:坐标可以是负数 这样即使坐标为负数,或者可以是任意大的坐标,都不会产生越界错误。 但是分块存储时负数却导致出错了 为什么 segf 了? 按理说不会越界才对?0 码力 | 102 页 | 9.50 MB | 1 年前3
共 7 条
- 1













