Utilisez bazel pour compiler tensorflow.so sous l'architecture du bras:

  • Message système
Architecture CPU système opérateur
arm64 Kunpeng 920 UOS1021
  • Processus approximatif
从源码编译arm架构的bazel
使用编译好的bazel编译tensorflow.so

Enfin, il sera compilé sous l'architecture arm libtensorflow.so.1.15.0et libtensorflow_framework.so.1.15.0le lien de téléchargement (uniquement la version compilée du CPU, pas la version du compilateur GPU)

1. Confirmation de version

1.1 Déterminez d'abord la version de tensorflow compilée cette fois: tensorflow-1.15.0

  • En regardant les exigences du projet, déterminez la tensorflowversion utilisée :1.15.0
  • Eh bien, téléchargez tensorflow-1.15.0le code source

1.2 Deuxièmement, déterminez la version bazel requise: bazel-0.25.0

  • Dans le code source de tensorflow, il y a des configure.pyfichiers:
    Insérez la description de l'image ici

  • Ouvrez le configure.pyfichier et recherchez bazel:
    Insérez la description de l'image ici

  • Vous pouvez voir tensorflow-1.15.0la version de bazella version entre 0.24.1les 0.26.1deux, nous avons choisi la bazel-0.25.0version.

2. Téléchargement de l’outil de base

2.1 jdk

2.1.1 Confirmer la version

  • Consultez la documentation officielle de bazel , sélectionnez bazel-0.25.0:
    Insérez la description de l'image ici

  • Cliquez sur installation overview:
    Insérez la description de l'image ici

  • Cliquez sur compile from source:
    Insérez la description de l'image ici

  • Vous pouvez voir les exigences de version de jdk et le numéro de version de jdk qu'il a utilisé:jdk1.8.0_112

Insérez la description de l'image ici
Insérez la description de l'image ici

2.1.2 Téléchargez et installez: jdk1.8.0_112

2.1.3 Variables d'environnement jdk

  • Éditer:
$ sudo vim /etc/profile # 编辑文件

# 在最后添加以下三行
export JAVA_HOME=/home/baixin/Desktop/java/jdk1.8.0_112
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 

# 使其生效
$ source /etc/profile
  • Il est préférable de redémarrer l'ordinateur

2.2 gcc et g ++

  • Les deux versions doivent être cohérentes, sinon une erreur peut être signalée:
gcc: error trying to exec 'cc1plus': execvp: No such file or directory

2.2.1 Déterminer le numéro de version des deux

$ gcc -v # 查看gcc版本
$ g++ -v # 查看g++版本

2.2.2 Mise à niveau et rétrogradation

Lien de référence

2,3 Nginx

2.3.1 Introduction à Nginx (spécifiquement par Baidu)

  • Nginx (moteur x) est un serveur Web HTTP et proxy inverse haute performance .
  • L'effet est similaire à ce que vous saisissez dans le navigateur: https://linux265.com/static/images/upload/featured-nginx.jpg

2.3.2 Pourquoi utiliser Nginx?

  • Lors de la compilation ultérieure de tensorflow, vous devrez télécharger de nombreux packages de dépendances, mais le client Ruijie est tombé en panne sous l'architecture arm, et les machines Kunpeng n'ont pas de carte réseau sans fil, et le téléchargement des packages de dépendances signalera très probablement des erreurs.
  • Deuxièmement, bazel effacera le cache du dernier téléchargement à chaque fois qu'il sera compilé, il n'est donc pas possible de placer les fichiers téléchargés directement dans le répertoire du cache.
  • Par conséquent, vous ne pouvez utiliser Nginx que pour créer un serveur de fichiers localement et laisser bazel télécharger des fichiers localement.

2.3.3 Installer Nginx

  • Entrée de ligne de commande:
$ sudo apt-get update
$ sudo apt-get install nginx
  • S'il indique que la source du logiciel n'a pas Nginx, changez d'abord la source:
# 添加公匙
$ sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 40976EAF437D05B5 3B4FE6ACC0B21F32

# 清除软件仓库缓存
$ sudo apt-get clean

# 修改软件源:/etc/apt/source.list文件
deb http://mirrors.aliyun.com/ubuntu-ports/ xenial main
deb-src http://mirrors.aliyun.com/ubuntu-ports/ xenial main
 
deb http://mirrors.aliyun.com/ubuntu-ports/ xenial-updates main
deb-src http://mirrors.aliyun.com/ubuntu-ports/ xenial-updates main
 
deb http://mirrors.aliyun.com/ubuntu-ports/ xenial universe
deb-src http://mirrors.aliyun.com/ubuntu-ports/ xenial universe
deb http://mirrors.aliyun.com/ubuntu-ports/ xenial-updates universe
deb-src http://mirrors.aliyun.com/ubuntu-ports/ xenial-updates universe
 
deb http://mirrors.aliyun.com/ubuntu-ports/ xenial-security main
deb-src http://mirrors.aliyun.com/ubuntu-ports/ xenial-security main
deb http://mirrors.aliyun.com/ubuntu-ports/ xenial-security universe
deb-src http://mirrors.aliyun.com/ubuntu-ports/ xenial-security universe

# 重新安装
$ sudo apt-get update
$ sudo apt-get install nginx

2.3.4 Configuration

  • Trouvez nginx.confle chemin du fichier de configuration Nginx :
$ sudo find / -name "nginx.conf"
  • Modifiez le nginx.conffichier de configuration (le contenu du fichier est similaire, recherchez d'abord le module serveur, puis modifiez les trois éléments suivants):
    • Port (changez-le pour qu'il soit plus grand pour éviter les conflits avec le port par défaut 80): 7140
    • Jeu de caractères: charset UTF-8;
    • L'emplacement où le fichier local doit être stocké: root "/ home / baixin / Desktop / file"
# 修改后的部分文件内容:

......

    server {
    
    
        listen       7140; # 设置端口
        server_name  localhost;

        charset UTF-8; # 设置字符集

        #access_log  logs/host.access.log  main;

        location / {
    
    
            root   "/home/baixin/Desktop/file"; # 本地文件存放位置,根据自己的情况而定
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
    
    
            root   html;
        }

......

2.3.5 Vérification

  • Entrez-le simplement directement dans le navigateur http://127.0.0.1:7140/img.jpg. (Bien sûr, /home/baixin/Desktop/filele fichier image doit être dans votre chemin)

3. Compilez bazel

3.1 Environnement (nous n'avons pas besoin d'installer ce que nous avons installé auparavant)

  • Tutoriel du site officiel:
sudo apt-get install build-essential openjdk-8-jdk python zip unzip

3.2 Télécharger le paquet source

  • adresse du projet github

  • Sélectionnez la bazel-0.25.0version et entrez l' adresse du package de version .

  • Remarque: pour compiler bazel à partir du code source bazel-0.25.0-dist.zip, téléchargez le package, pas le Source codepackage bazel .

Insérez la description de l'image ici

3.3 Compiler bazel

  • Entrez dans le bazelrépertoire de décompression et entrez la commande:
env EXTRA_BAZEL_ARGS="--host_javabase=@local_jdk//:jdk" bash ./compile.sh # 其实这段代码来自官网
  • Si vous entrez directement ./compile.sh, cela peut signaler une erreur: jdk introuvable

  • Installer bazel

$ cd ./output
$ ./bazel

3.4 Configurer les variables d'environnement bazel

  • En supposant que le compilé se trouve bazeldans le /home/baixin/DeskTop/bazel/outputrépertoire, ~/.bashrcajoutez à la fin du fichier:
export PATH=/home/baixin/DeskTop/bazel/output:$PATH
  • Faire prendre effet à la nouvelle variable d'environnement
$ source ~/.bashrc

4. Compilez tensorflow avec bazel

4.1 Pensée normale

  • Entrez la commande dans le répertoire du code source tensorflow et suivez les invites pour configurer les éléments pertinents:
$ ./configure
  • Commande de compilation Bazel:
$ bazel build //tensorflow:libtensorflow.so # 我用的这个可以编译成功,可以多搜些命令,试下。

4.2 Mais. . .

  • Le processus de compilation téléchargera de nombreux packages dépendants et vous échouerez probablement à télécharger
  • Une erreur vous demandera quels fichiers n'ont pas pu être téléchargés, et l'URL du fichier, selon le bien des dépendances d'URL, sur le titre 1.3.2du /home/baixin/Desktop/filerépertoire

4.3 Comment trouver et modifier l'URL dans le code source de tensorflow?

4.3.1 La modification est similaire à la figure suivante:

  • Parmi eux, la boîte rouge est le contenu nouvellement ajouté (note: l'ordre d'ajout peut également être signalé de manière incorrecte):
    Insérez la description de l'image ici
  • Blog de référence

4.3.2 Méthode de recherche spécifique

  • Tout d'abord, les fichiers que nous recherchons sont tous des .bzlsuffixes. De plus, les WORKSPACEfichiers dans le répertoire racine des sources sont également possibles.

  • Deuxièmement, lisez attentivement le message d'erreur. Il vous indiquera un fichier dans le code source de tensorflow. Recherchez dans ce fichier pour voir si vous pouvez trouver l'adresse URL du package dépendant.

  • Enfin, en fonction du nom du package de dépendances, vérifiez le code source ./tensorflow/coreet ./third_partyci - dessous pour voir s'il existe un dossier avec le même nom que la dépendance manquante, entrez et recherchez .bzlle fichier avec le suffixe yes .

  • Référence ci-dessus: C'est un blog très utile, qui m'a beaucoup aidé. Vous pouvez lire cet article lorsque vous rencontrez un échec de téléchargement de package

5. Lien de téléchargement

Je suppose que tu aimes

Origine blog.csdn.net/xieyipeng1998/article/details/112954045
conseillé
Classement