bazelを使用して、armアーキテクチャでtensorflow.soをコンパイルします。

  • システムメッセージ
建築 CPU オペレーティング・システム
arm64 クンペン920 UOS1021
  • 大まかなプロセス
从源码编译arm架构的bazel
使用编译好的bazel编译tensorflow.so

最後に、armアーキテクチャlibtensorflow.so.1.15.0libtensorflow_framework.so.1.15.0ダウンロードリンクの下でコンパイルされます(GPUコンパイラバージョンではなく、CPUのコンパイルバージョンのみ)

1.バージョン確認

1.1最初に、今回コンパイルされたtensorflowのバージョンを決定します:tensorflow-1.15.0

  • プロジェクトの要件を見て、使用するtensorflowバージョンを決定します1.15.0
  • tensorflow-1.15.0ソースコードをダウンロードしてください

1.2次に、必要なbazelバージョンを決定します:bazel-0.25.0

  • tensorflowソースコードには、次のconfigure.pyファイルがあります。
    ここに画像の説明を挿入

  • configure.pyファイルを開いて検索しますbazel
    ここに画像の説明を挿入

  • あなたが見ることができるtensorflow-1.15.0のバージョンbazelにバージョン間、我々は選択したバージョンを。0.24.10.26.1bazel-0.25.0

2.基本的なツールのダウンロード

2.1 jdk

2.1.1バージョンの確認

  • 公式のbazelドキュメントを確認し、次を選択しますbazel-0.25.0
    ここに画像の説明を挿入

  • クリックinstallation overview
    ここに画像の説明を挿入

  • クリックcompile from source
    ここに画像の説明を挿入

  • 彼が使用したjdkバージョン要件とjdkバージョン番号を確認できます。jdk1.8.0_112

ここに画像の説明を挿入
ここに画像の説明を挿入

2.1.2ダウンロードしてインストール:jdk1.8.0_112

2.1.3jdk環境変数

  • 編集:
$ 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
  • コンピュータを再起動するのが最善

2.2gccおよびg ++

  • 2つのバージョンは一貫している必要があります。そうでない場合、エラーが報告される可能性があります。
gcc: error trying to exec 'cc1plus': execvp: No such file or directory

2.2.12つのバージョン番号を決定する

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

2.2.2アップグレードとダウングレード

参照リンク

2.3 Nginx

2.3.1 Nginxの概要(特にBaiduによる)

  • Nginx(engine x)は、高性能のHTTPおよびリバースプロキシWebサーバーです。
  • 効果は、ブラウザに入力したものと似ています:https://linux265.com/static/images/upload/featured-nginx.jpg

2.3.2なぜNginxを使用するのですか?

  • 後でテンソルフローをコンパイルするときは、多くの依存関係パッケージをダウンロードする必要がありますが、Ruijieクライアントはarmアーキテクチャでクラッシュし、Kunpengマシンにはワイヤレスネットワークカードがなく、依存関係パッケージをダウンロードするとエラーが報告される可能性があります。
  • 次に、bazelはコンパイルされるたびに最後のダウンロードのキャッシュをクリアするため、ダウンロードしたファイルをキャッシュディレクトリに直接配置することはできません。
  • したがって、Nginxを使用してファイルサーバーをローカルに構築し、bazelにファイルをローカルにダウンロードさせることしかできません。

2.3.3Nginxをインストールします

  • コマンドライン入力:
$ sudo apt-get update
$ sudo apt-get install nginx
  • ソフトウェアソースにNginxがないことを確認するメッセージが表示された場合は、最初にソースを変更します。
# 添加公匙
$ 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構成

  • Nginx構成ファイルのnginx.confパスを見つけます
$ sudo find / -name "nginx.conf"
  • nginx.conf構成ファイルを編集します(ファイルの内容は類似しています。最初にサーバーモジュールを見つけてから、次の3つの項目を編集します)。
    • ポート(デフォルトのポート80との競合を防ぐために、ポートを大きくするように変更します):7140
    • 文字セット:charset UTF-8;
    • ローカルファイルを保存する場所: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検証

  • ブラウザに直接入力するだけですhttp://127.0.0.1:7140/img.jpg(もちろん、/home/baixin/Desktop/file画像ファイルはパスに含まれている必要があります

3.ベーゼルをコンパイルします

3.1環境(以前にインストールしたものをインストールする必要はありません)

  • 公式ウェブサイトチュートリアル:
sudo apt-get install build-essential openjdk-8-jdk python zip unzip

3.2ソースパッケージのダウンロード

  • githubプロジェクトアドレス

  • bazel-0.25.0バージョンを選択しリリースパッケージアドレスを入力します。

  • 注:ソースコードからbazelをコンパイルするbazel-0.25.0-dist.zipには、bazelSource codeパッケージではなく、パッケージをダウンロードします。

ここに画像の説明を挿入

3.3コンパイルベーゼル

  • 入力bazel解凍ディレクトリを、コマンドを入力します。
env EXTRA_BAZEL_ARGS="--host_javabase=@local_jdk//:jdk" bash ./compile.sh # 其实这段代码来自官网
  • 直接入力する./compile.shと、エラーが報告される場合があります:jdkが見つかりません

  • バゼルをインストールします

$ cd ./output
$ ./bazel

3.4bazel環境変数を構成する

  • コンパイルさbazelれたものが/home/baixin/DeskTop/bazel/outputディレクトリにあると仮定して~/.bashrc、ファイルの最後に次を追加します。
export PATH=/home/baixin/DeskTop/bazel/output:$PATH
  • 新しい環境変数を有効にする
$ source ~/.bashrc

4.テンソルフローをバゼルでコンパイルします

4.1通常の考え方

  • tensorflowソースコードディレクトリにコマンドを入力し、プロンプトに従って関連する設定を行います。
$ ./configure
  • Bazelコンパイルコマンド:
$ bazel build //tensorflow:libtensorflow.so # 我用的这个可以编译成功,可以多搜些命令,试下。

4.2しかし。

  • コンパイルプロセスでは多くの依存パッケージがダウンロードされ、ダウンロードに失敗する可能性があります
  • エラーが発生すると、ダウンロードに失敗したファイルと、URLの依存関係に応じて、ディレクトリのタイトル1.3.2ファイルのURLが表示されます。/home/baixin/Desktop/file

4.3 TensorFlowソースコードでURLを見つけて変更するにはどうすればよいですか?

4.3.1変更は次の図のようになります。

  • その中で、赤いボックスは新しく追加されたコンテンツです(注:追加の順序も誤って報告される場合があります):
    ここに画像の説明を挿入
  • リファレンスブログ

4.3.2特定の検索方法

  • まず、探しているファイルはすべて.bzlサフィックスです。さらにWORKSPACEソースルートディレクトリ内のファイルも可能です。

  • 次に、エラーメッセージを注意深く読んでください。テンソルフローソースコード内のファイルが表示されます。このファイルを検索して、依存パッケージのURLアドレスを見つけることができるかどうかを確認してください。

  • 最後に、依存パッケージの名前に応じて、ソースコードをチェック./tensorflow/coreして./third_partyするには、以下を参照行方不明の依存関係と同じ名前のフォルダがある場合、入力し、ために表情.bzlを持つファイル接尾辞はい

  • 上記の参照:これは非常に便利なブログであり、私を大いに助けてくれました。パッケージのダウンロードに失敗したときにこの記事を読むことができます

5.ダウンロードリンク

おすすめ

転載: blog.csdn.net/xieyipeng1998/article/details/112954045
おすすめ