1.为Python应用选择最好的源译Docker镜像
2.从源码build Tensorflow2.6.5的记录
为Python应用选择最好的Docker镜像
在Python应用的部署过程中,选择适合的码编Docker镜像是一项关键任务。早期,源译virtualenvwrapper曾是码编Python包管理的常用工具,但随着Python 3的源译普及,venv逐渐成为首选。码编药智网源码然而,源译随着项目复杂性的码编提升,Docker的源译重要性日益凸显,尤其是码编在集成Redis消息队列和Psycopg PostgreSQL数据库等场景下。
在构建Docker镜像时,源译我们通常从基础镜像如Alpine、码编Ubuntu、源译CentOS或Debian出发。码编code原理源码然而,源译选择哪一种并非易事。首先,我们需要考虑镜像是否提供长期支持(LTS),以确保软件的稳定性和维护周期。长期支持意味着软件更新更可靠,且降低了部署风险和中断时间。
对于Ubuntu、CentOS和Debian等传统发行版,它们虽然历史悠久,但预装的Python版本可能不更新。例如,Ubuntu .可能预装的换皮梦幻源码是Python 3.6,而最新的稳定版已经是3.8。为获取最新Python,可能需要自行编译安装,这在某些版本中是必要的,如在CentOS 8中安装Python 3.8。
另一种选择是Docker官方的Python镜像,提供了多个Python版本供选择,这便于管理,但需注意不同版本间可能存在差异。Amazon Linux 2作为云计算环境下的Linux发行版,是AWS官方推荐的,提供了LTS支持和针对性优化,适合生产环境部署。snmp vb源码
Alpine由于其轻量级特性,常被用于寻求最小化镜像空间的需求。然而,由于它使用musl库而非glibc,可能导致pip安装的一些依赖无法直接安装,需要源码编译,这使得Alpine的构建时间显著增加,对大规模部署不利。
综上所述,选择Docker镜像时,需综合考虑支持、镜像大小、构建时间等因素。方舟买源码虽然Alpine在某些情况下可能表现出色,但在生产环境中,考虑到稳定性、长期支持和构建效率,可能还是选择长期支持版本的Linux发行版或官方Python镜像更为合适。实际选择时,根据项目具体需求和限制进行细致评估是关键。
从源码build Tensorflow2.6.5的记录
.从源码编译Tensorflow2.6.5踩坑记录,笔者经过一天的努力,失败四次后终于成功。Tensorflow2.6.5是截至.时,能够从源码编译的最新版本。
0 - 前期准备
为了对Tensorflow进行大规模修改并完成科研工作,笔者有从源码编译Tensorflow的需求。平时更常用的做法是在conda环境中pip install tensorflow,有时为了环境隔离方便打包,会用docker先套住,再上conda + pip安装。
1 - 资料汇总
教程参考:
另注:bazel的编译可以使用换源清华镜像(不是必要)。整体配置流程的根本依据还是官方的教程,但它的教程有些点和坑没有涉及到,所以多方材料了解。
2 - 整体流程
2.1 确定配置目标
官网上给到了配置目标,和对应的版本匹配关系(这张表里缺少了对numpy的版本要求)。笔者最后(在docker中)配置成功的版本为tensorflow2.6.5 numpy1..5 Python3.7. GCC7.5.0 CUDA.3 Bazel3.7.2。
2.2 开始配置
为了打包方便和编译环境隔离,在docker中进行了以下配置:
2. 安装TensorFlow pip软件包依赖项,其编译过程依赖于这些包。
3. Git Tensorflow源代码包。
4. 安装编译工具Bazel。
官网的介绍:(1)您需要安装Bazel,才能构建TensorFlow。您可以使用Bazelisk轻松安装Bazel,并且Bazelisk可以自动为TensorFlow下载合适的Bazel版本。为便于使用,请在PATH中将Bazelisk添加为bazel可执行文件。(2)如果没有Bazelisk,您可以手动安装Bazel。请务必安装受支持的Bazel版本,可以是tensorflow/configure.py中指定的介于_TF_MIN_BAZEL_VERSION和_TF_MAX_BAZEL_VERSION之间的任意版本。
但笔者尝试最快的安装方式是,到Github - bazelbuild/build/releases上下载对应的版本,然后使用sh脚本手动安装。比如依据刚才的配置目标,笔者需要的是Bazel3.7.2,所以下载的文件为bazel-3.7.2-installer-linux-x_.sh。
5. 配置编译build选项
官网介绍:通过运行TensorFlow源代码树根目录下的./configure配置系统build。此脚本会提示您指定TensorFlow依赖项的位置,并要求指定其他构建配置选项(例如,编译器标记)。
这一步就是选择y/N基本没啥问题,其他参考里都有贴实例。笔者需要GPU的支持,故在CUDA那一栏选择了y,其他部分如Rocm部分就是N(直接按enter也可以)。
6.开始编译
编译完成应输出
7.检查TF是否能用
3 - 踩坑记录
3.1 cuda.0在编译时不支持sm_
笔者最初选择的docker是cuda.0的,在bazel build --config=cuda //tensorflow/tools/pip_package:build_pip_package过程中出现了错误。所以之后选择了上面提到的cuda.3的docker。
3.2 问题2: numpy、TF、python版本匹配
在配置过程中,发现numpy、TF、python版本需要匹配,否则会出现错误。
4 - 启示
从源码编译Tensorflow2.6.5的过程,虽然经历了多次失败,但最终还是成功。这个过程也让我对Tensorflow的编译流程有了更深入的了解,同时也提醒我在后续的工作中要注意版本匹配问题。