The big part of my work during last months was related to TensorFlow. We build it on Linaro CI. Resulting wheels are available on Linaro snapshots server.
When you dig there you can find those versions:
- 2.7.x (git HEAD)
How to install?
TensorFlow requires several other Python packages and some of them are not distributed as AArch64 binary wheels. For this we have Python cache repository at Linaro snapshots.
So how to install TensorFlow (2.6.0 or 2.7.0 version):
$ export PIP_EXTRA_INDEX_URL=https://snapshots.linaro.org/ldcg/python-cache/ $ pip install tensorflow-aarch64
And it will be done. Package is renamed from “tensorflow-cpu” as there is a plan of uploading them to Pypi. For older versions please check our snapshots server.
How do we build?
Jenkins runs shell script which then starts container, installs Ansible and then the rest of build is done using it. Playbooks, roles and shell scripts are stored in Jenkins jobs repository.
The process is quite simple — we choose which versions to build (from 1.5, 2.4, 2.5, 2.6, git HEAD selection) and then Ansible loops over them. All dependencies’ versions are stored in variables file.
Whole work is done inside of “manylinux2014” container to get a way of building for wide selection of Python releases. Build covers versions from 3.6 to 3.9 one (we plan to enable 3.10 when possible) in one run.
To compare speed of several systems I have available I ran a build on each and compared to times on Linaro CI machine.
|Oracle cloud A1||Altra||16||16||96||VM.Standard.A1.Flex|
|Linaro CI||ThunderX2||2x28||56||240||SMT disabled|
|my work laptop||i7-8665U||4||8||32||SMT enabled|
|my desktop||Ryzen 5 3600||6||12||32||SMT enabled|
Build time includes fetching files from network. Python packages comes from either Pypi or Linaro Python cache repository.
Install Docker, pull manylinux2014 image, fetch script from Linaro CI job git repository, run it.
$ docker pull quay.io/pypa/manylinux2014_aarch64 $ wget https://git.linaro.org/ci/job/configs.git/plain/ldcg-python-manylinux-tensorflow/build.sh $ mkdir BUILD $ cd BUILD $ export WORKSPACE= $ time build26=true bash ../build.sh
BUILD directory created as job starts with cleaning workspace (stored in WORKSPACE variable).
|Machine name||build time|
|Oracle cloud A1||3:15:53.250|
|my work laptop||10:01:19.044|
HoneyComb is a good system for development work. As long as there are other systems which will do hard work on building things.
ThunderX2 is a workhorse. Give it something to do and it delivers. It was also very expensive (Avantek started with 13k USD for workstation).
Oracle cloud instance used Ampere Altra cpu. Would not be surprised if it beats ThunderX2 system when more cores are used (16 cores was limit of free tier).
I used my work laptop because it was available. Did not expected much from it. But in past benchmarks it was close to my previous desktop system.
And with my desktop… It was quite cheap solution 2 years ago. Looks like price/performance is something where x86-64 is a king.