Istio由控制面和数据面组成。其中Envoy是Istio在数据面缺省使用的转发代理,Istio利用Envoy的四层和七层代理功能对网格中微服务之间的调用流量进行转发。今天我们来分析一下Istio 使用到的Envoy构建流程。
本文的目的是分享在TX1上安装Tensorflow Serving时遇到的主要问题,避免重复踩坑。
Bazel是一个类似于Make的编译工具,是Google为其内部软件开发的特点量身定制的工具,如今Google使用它来构建内部大多数的软件。(怪不得看起来很像Android.bp语法 O(∩_∩)O)
RocketMQ 5.0 是一个里程碑式的版本,经历了近 5 年的打磨,代码变更达到 60%。
在过去服务器后端开发一直是c++绝对称霸的领域,但是随着近些年互联网时的快速发展,产品的快速迭代,c++的开发的效率不高的问题使得越来越多的初创公司在技术选型的时候抛弃它而转向了go,go语言的易用性无疑的其能得到青睐的重要原因,尤其是其go module支持的现代语言包管理方式,使得其比c++更让人容易接受。
原因还是以前常见的镜像服务错误:http: server gave HTTP response to HTTPS client
本篇文章翻译自tensorflow官网,会加上自己的一些实操讲解,便于大家快速运行起第一个移动端机器学习的demo。 为了让你在Android上开始使用tensorflow,我们将通过两种方式来构建我
首先说一下背景,之前的项目都是基于 Android 5.1 (是的,你没看错,相当古老的版本) 打造,近期打算将系统升级到 Android 10。我的工作主要是进行浏览器内核的迁移。
使用多线程编译是一种提高编译速度的有效方法。在Makefile中,可以通过设置"-j"选项来指定使用的线程数。例如,可以使用以下命令启用4个线程:
在当今的软件开发世界中,构建工具的选择对于提高开发效率、维护代码质量以及提升团队协作能力都至关重要。谷歌作为全球技术巨头,为了解决大规模代码构建和测试的挑战,开发了一款名为Bazel的构建工具。Bazel具有强大的功能和灵活性,已成为开源社区中的明星工具。本文将深入探讨谷歌的Bazel构建工具及其在软件开发中的应用。
TensorFlow对Android、iOS、树莓派都提供移动端支持。 移动端应用原理。移动端、嵌入式设备应用深度学习方式,一模型运行在云端服务器,向服务器发送请求,接收服务器响应;二在本地运行模型,
本篇的代码放在: https://github.com/backendcloud/example/tree/master/bazel-sample/docker WORKSPACE文件内容: 加载rules_go 加载rules_docker 加载gazelle 准备基础镜像alpine_linux_amd64和distroless_linux_amd64 (类似Dockerfile的FROM) ⚡ root@localhost ~/bazel-sample/docker main ± c
这里名词只做个索引,方便理解,可能现在反而让理解变得更加复杂,不过没关系,我们主要是实现的就是自定义 build flag。更多参见这里[1]。
本文会讲述 Bazel 自定义工具链的两种方式,Platform 和 Non-Platform 方式。会存在这两种方式的原因是 Bazel 的历史问题。例如,C++ 相关规则使用 --cpu 和 --crosstool_top 来设置一个构建目标 CPU 和 C++ 工具链,这样就可以实现选择不同的工具链构建 C++ 项目。但是这都不能正确地表达出“平台”特征。使用这种方式不可避免地导致出现了笨拙且不准确的构建 APIs。这其中导致了对 Java 工具链基本没有涉及,Java 工具链就发展了他们自己的独立接口 --java_toolchain。因此非平台方式(Non-Platform)的自定义工具链实现并没有统一的 APIs 来规范不同语言的跨平台构建。而 Bazel 的目标是在大型、混合语言、多平台项目中脱颖而出。这就要求对这些概念有更原则的支持,包括清晰的 APIs,这些 API 绑定而不是分散语言和项目。这就是新平台(platform)和工具链(toolchain) APIs 所实现的内容。
本篇文章通过https://github.com/bazelbuild/examples/tree/main/cpp-tutorial里面的例子,来简单介绍下bazel构建的基础知识,方便后续查找和学习。
经过三年的试用,2020 年,Spotify 决定采用 Bazel 作为 Spotify iOS 应用程序的官方构建系统。按照 Spotify 工程师 Patrick Balestra 的说法,这一切换将他们的构建时间减少了四分之三。
最近在 BazelCon 23 上宣布,Bazel 7 推出了多年来一直在开发中的一系列新功能,其中包括全新的模块化外部依赖管理系统 Bzlmod、全新优化的“Build without the Bytes”模式、得益于 Project Skymeld 的多目标构建性能改进等等。
Protocol Buffer是谷歌开发的处理结构化数据的工具,类似于XML和JSON这两种比较常用的结构化数据处理工具。但是Protocal Buffer格式的数据和XML或者JSON又有很大的区别:首先,使用Protocol Buffer时需要先定义数据格式schema(Protocol Buffer的具体编码方式),其序列化后得到的数据不是可读字符串,而是二进制流;其次,Protocol Buffer格式的数据不需要任何其他信息就能还原序列化之后的数据。Protcol Buffer序列化出来的数据要比XML格式的数据笑3到10倍,解析时间要快20到100倍。
Bazel 支持很多内置的规则,语言相关规则有 Shell、Objective-C、C++ 和 Java,比如 sh_binary、cc_binary、cc_import、cc_library、java_binary、java_import等。但是 Go 编译内置规则没有支持,不过好在 Bazel 支持规则扩展,可以自定义 Go 相关规则,包括可以实现如 go_binary、go_library、go_test等规则。而 `rules_go`[1] 就是 Bazel 官方维护的 Go Bazel 开源扩展规则。`gazelle`[2] 这个项目可以将 Go 项目转为 Bazel 方式构建,包括生成 BUILD.bazel 文件,根据 go.mod 文件自动生成下载依赖模块规则 go_repository。这里简单介绍下 rules_go 和 gazelle 相关内容,更多可以参考官方相关文档。
作为C/C++开发,其语言的掌握自然是非常重要的,当然了,与此相关的算法,计算机基础,网络等知识也都是需要学习了解的,那么除此之外,还有哪些是建议掌握的呢?
作者 | Gregory Szorc 译者 | 王者 策划 | 万佳 与几年前相比,现在的 CI 平台要强大得多。总的来说,这是一件好事。借助强大的 CI 平台,软件公司和开发人员可以更频繁地发布更可靠的软件,这对软件用户或客户来说是有利的。一些集中式 CI 平台(如 GitHub Actions、GitLab Pipelines 和 Bitbucket)带来了规模效益,互联网提供了有关如何使用它们的信息。只要搜索一下如何在 CI 平台 Y 上执行 X 操作,就可以找到一些可以直接复制和粘贴的代码。毕竟,没
随着其他组织将他们的构建管道迁移到Bazel 之后,Airbnb 也发布了一个详细的说明,分享了他们弃用 Buck 并改善构建时间以及项目生成和加载时间的过程。
选自Matrices.io 作者:Florian Courtial 机器之心编译 参与:李泽南、蒋思源 很多人都知道 TensorFlow 的核心是构建在 C++之上的,但是这种深度学习框架的大多数功能只在 Python API 上才方便使用。 当我写上一篇文章的时候,我的目标是仅使用 TensorFlow 中的 C++ API 和 CuDNN 来实现基本的深度神经网络(DNN)。在实践中,我意识到在这个过程中我们忽略了很多东西。 注意,使用外部操作(exotic operations)训练神经网络是不可能
上一篇大概介绍了istio引入了wasm以及wasm的简史介绍。虽然引入了一些知识引导读者了解一下它的简单特性,但是还有些欠缺,这里要打个补丁。详细阐述一下 wasm 构建及使用的相关知识。
作者 | Motiejus Jakštys 译者 | 平川 策划 | 罗燕珊 本文最初发布于 Motiejus Jakštys 的个人博客。 免责声明:我在 Uber 工作,我的一部分职责是将 zig cc 引入公司。但这篇文章是我的观点,与 Uber 无关。 我日前在 Zig 的一场交流会上作了题为“Uber 引入 Zig”的 演讲。本文从技术和社交两方面简单介绍了“Uber 是如何使用 Zig 的”,而主要的篇幅是介绍“我把 Zig 带到 Uber 的经验”。 本文要点: Uber 使用
对大型项目来说,必然会有很多的依赖项。特别是现代化的组件都会尝试去复用社区资源。而对于C/C++而言,依赖管理一直是一个比较头大的问题。 很多老式的系统和工具都会尝试去走相对标准化的安装过程,比如说用 pkg-config 或者用系统自带的包管理工具装在系统默认路径里。 当然这样很不方便,也不容易定制组件。我使用 cmake 比较多,所以一直以来在我的 atframework 项目集中有一个 utility 项目 atframe_utils,里面包含一些常用的构建脚本。 并且在 atsf4g-co 中实现了一些简单的包管理和构建流程。
要解决上述的问题,我们需要一个构建脚本/工具来自动化的在开发、持续集成、预发布阶段提供下列功能:
Bazel 是 Google 公司于 2015 年开源的一款构建框架,至今收获了 21k 的 star 数,远超 gradle、maven、cmake 等同类产品。近几年来,字节阿里腾讯等互联网大厂也逐步拥抱 Bazel,搭建自己的构建体系。
让工作变得有条理,不乱糟糟,即使存在大量的第三方,也有章可循。简而言之,就是要保持目录的干净(如/usr/local目录),保持文件的干净(如profile文件)
TensorFlow™是一个基于数据流编程(dataflow programming)的符号数学系统,被广泛应用于各类机器学习(machine learning)算法的编程实现,其前身是谷歌的神经网络算法库DistBelief。
我们之前的文章里经常使用常规规则(regular rules)函数 rule() 来创建自定义规则,但是这些规则都有一个问题:他们依赖于主机系统上安装的各种工具。这样就会出现一个问题,即构建是不可复制的,如果同一项目上的两个开发人员安装了不同版本的 Go SDK,则他们将构建不同的二进制文件。它还会中断远程执行,即主机的工具链可能在执行平台上不可用。而 repository_rule() 就可以解决这个问题。
2021 年 11 月,我们决定评估 arm64 架构在 Uber 的可行性。我们的大多数服务是用 Go 或 Java 编写的,但我们的构建系统只能编译成 x86_64。现在,得益于开源合作,Uber 拥有了一个独立于系统的构建工具链,可以无缝地支持多种架构。我们使用这个工具链来引导 arm64 主机。本文将分享我们是如何着手去做这件事情的,以及我们早期的想法、遇到的问题、达成的一些成就和未来的方向。
对于个人和公司来说,存在许多状况是更希望在本地设备上做深度学习推断的:想象一下当你在旅行途中没有可靠的互联网链接时,或是要处理传输数据到云服务的隐私问题和延迟问题时。
众所周知,应用程序的大小(下载大小 [1] [2])是非常重要的,并且在应用程序的大小和客户参与度之间存在关联。通常,人们会根据大小来决定是否使用软件,甚至以兆字节来支付带宽。更不用说,随着应用程序大小的增加,卸载率也会上升,这会导致用户试图释放设备上的磁盘空间。
{Fast, Correct} - Choose two Build and test software of any size, quickly and reliably
最近公司给我们分配了2台虚拟机服务器用于强化学习训练,我们在虚拟环境中安装好了TensorFlow环境后,在import tensorflow时发现报了下面的错误:
最近公司给我们分配了2台虚拟机服务器用于强化学习训练,我们在虚拟环境中安装好了TensorFlow环境后,在import tensorflow时发现报了下面的错误: 于是我去Google搜索了下出现这个错误的原因,发现是因为我们服务器的CPU不支持AVX指令集导致的,而使用pip安装的TensorFlow需要依赖AVX指令集,为了确认我们的CPU是否真的不支持AVX指令集,我使用cat /proc/cpuinfo 命令查看了下目前CPU指令集支持情况,发现我们的CPU果然不支持AVX指令集。 又不支持
选自DataScience 作者:Chia-Chun 机器之心编译 参与:Edison Ke、路雪 本文作者 Chia-Chun (JJ) Fu 是加州大学圣塔芭芭拉分校的化学工程博士。她在 Insight 工作的时候,在安卓系统上用 TensorFlow 部署了一个 WaveNet 模型。本文详细介绍了部署和实现过程。 对于个人和公司来说,存在许多状况是更希望在本地设备上做深度学习推断的:想象一下当你在旅行途中没有可靠的互联网链接时,或是要处理传输数据到云服务的隐私问题和延迟问题时。边缘计算(Edge c
大家好,我是光城,最近花了几周业余时间,开发出这款轻量线程池,代码也全部开源啦,欢迎大家star。
本文介绍了一种在Android平台上使用TensorFlow进行物体检测的方法。首先介绍了Android平台如何调用TensorFlow,然后介绍了如何使用预训练的模型进行物体检测。最后,给出了一段示例代码和一张运行结果图。
一、Apollo的技术架构 Apollo是一套完整的自动驾驶技术方案,官方架构原图的截图较为模糊,这里自己画了一个简单的四层结构,每层内的模块暂未画出,因为不是本次入门的重点: 按照上图,apollo
在今天早些时候Angular团队发布了8.0.0稳定版。其实早在NgConf 2019大会上,演讲者就已经提及了从工具到差分加载的许多内容以及更多令人敬畏的功能。下面是我对8.0.0一些新功能的简单介绍,希望可以帮助大家快速了解新版本。
作者|Florian Courtial 译者|Debra 编辑|Emily AI 前线导读:训练神经网络是一件十分复杂,难度非常大的工作,有没有可能让训练的过程简单便利一些呢?有人突发奇想,尝试仅仅使用 TensorFlow C ++ 来进行这项工作。这样做的效果如何呢?我们来看看 Florian Courtial 用 TensorFlow C ++ 构建 DNN 框架的示例来了解一下吧。 更多干货内容请关注微信公众号“AI 前线”,(ID:ai-front) 正如你所知,TensorFlow(TF)的
tensorflow bazel 编译命令: (编译cpu支持的版本,限制编译的内存为2GB, 并兼容旧版本的ABI)
本文是何晓杰的译文 Soong 是原基于 make 的构建系统的替代品。它使用 Android.bp 来取代 Android.mk,并使用类似于 JSON 的格式来描述一个模块的构建方案。 Android.bp 文件格式 Android.bp 的设计非常简单,没有条件判断或控制流语句。在 Go 语言中编写的构建逻辑没有任何复杂度。Android.bp 的语法和语义可能也类似于 Bazel BUILD 文件。 模块 模块在 Android.bp 文件中以一个模块类型开始,后面跟着一组
为了实现如标题所述的将多个静态库合并为一个动态库,内置的 Bazel 规则是没有这个功能的,Bazel C/C++ 相关的内置规则有:
本文示例可见:https://github.com/ikuokuo/start-cpp20
Envoy 本身是很难编译的,需要使用到项目构建工具 Bazel[1],为了解决这个问题,Tetrate 的工程师(包括 Envoy 的核心贡献者和维护者)发起了 GetEnvoy[2] 项目,目标是利用一套经过验证的构建工具来构建 Envoy,并通过常用的软件包管理器来分发,包括:apt、yum 和 Homebrew。安装方式如下:
领取专属 10元无门槛券
手把手带您无忧上云