背景 ディープラーニング モデルの推論には、特定のデバイスが使用されます。マシンは、モデルの読み込み、起動、推論を行うための C++ カプセル化 API のみを提供します。モデルのトレーニングには、引き続き Caffe が使用されます。モデルは、デバイスでサポートされている形式に変換する必要があります。モデルの変換については、ここでは説明しません。モデル推論をサービスにするためには、C++ を使用して HTTP サービスを構築する必要がありました。これにより、ユーザーは HTTP サービスを通じて写真を投稿でき、サーバーはモデル推論を開始し、モデル予測を実装して、結果をクライアントに返すことができます。 全体的な枠組み ショートサービスのサービス内容は、受信した画像を前処理し、モデル推論を行うことです。今必要なのは、HTTPサービスを導入することです。 予備調査 C++ 初心者にとって、最初の調査は当然ながらまず検索することです。http サーバー C++ 検索処理の結果もさまざまです。http サーバーの実装方法を教えてくれるものもあれば、サードパーティのライブラリを使用するもの、大量のコードを直接扱うものもあります。 。 。私はstackoverflowでこれを見ました:
fcgi-function マッピングで NGINX を試してみませんか? 実装手順 Nginx はプロキシ用の魔法のツールであり、負荷分散によく使用されます。クライアントのコンテンツが nginx に送信され、nginx がデータを fcgi 関連のアプリケーションに転送する限り、必要なのは fcgi と推論プログラムを組み合わせることだけです。 nginx 簡単に言えば、nginx は仲介者です。クライアントは仲介者にリクエストを送信し、仲介者は商品の供給元に行って商品を受け取り、顧客に応答します。 顧客は nginx に ** 製品を購入したいと伝え、nginx は対応するサービス プロバイダーにアクセスして対応するサービスを取得し、顧客に返します。 今必要なのは fcgi 部分を実装することですが、fcgi とは何でしょうか? CG-10 ... Common Gateway Interface (CGI) は、クライアントが Web ブラウザーからネットワーク サーバー上で実行されるプログラムにデータを要求できるようにする重要なインターネット テクノロジです。 CGI は、サーバーと要求処理プログラム間でデータを転送するための標準を記述します。 ここでの標準入力と出力はいくつかの環境変数に対応しており、主にリクエスト関連の環境変数、サーバー関連の環境変数、クライアント関連の環境変数の 3 つのカテゴリが含まれます。 ファストcgi FastCGI は実際にはいくつかの拡張機能が追加された CGI です。これは CGI の改良版です。また、クライアントと Web サーバー プログラム間のデータ転送を記述するための標準でもあります。 FastCGI は、Web サーバーと CGI プログラム間のやり取りのオーバーヘッドを削減し、Web サーバーがより多くの Web 要求を同時に処理できるようにすることを目的としています。 Web 要求ごとに新しいプロセスを作成する CGI とは異なり、FastCGI は永続的なプロセスを使用して一連の Web 要求を処理します。これらの要求は、Web サーバーではなく FastCGI プロセス マネージャーによって管理されます。 なぜインタラクションのコストが削減されると言えるのでしょうか?これは、2つの治療法の違いによって異なります。 cgi のワークフロー: クライアントが新しいリクエストを送信するたびに、まず CGI 子プロセスを作成する必要があります。CGI がリクエストを処理した後、接続の数と同じ数の CGI 子プロセスが開始されます。リクエストの数が多いと、大量のシステム リソースが占有されます。 ファストcgi Fastcgi は、連続したプロセスを使用して一連のリクエストを処理します。これらのプロセスは、fastcgi プロセス マネージャーによって管理されます。具体的なプロセスは次のとおりです。 次のように比較することもできます。 cgi は卵入りパンケーキを販売しています。お客様が食べたいときに、火をつけ、卵を溶き、パンケーキを広げ、火を止めます。そして次の顧客を待ちます fastcgi は、朝食店の古いバージョンです。その場で調理する必要がある食事を準備するために、ウェイターのグループを雇います。店長は注文を整理するだけでよく、ウェイターはお粥とパンケーキを提供する責任があります。 具体的な手順
仕事をうまくやり遂げたいなら、まずは道具を磨き、環境を整えなければなりません。 多くのブログコンテンツを読んで、最も簡単なインストール手順を見つけました。その多くは、ソース コードをダウンロードし、make でコンパイルするというものです。ただし、これらのより一般的に使用されるライブラリは、すでにソフトウェア パッケージに統合されています。 C++ 開発環境のインストール apt-get インストールビルド必須 nginx nginxをインストール ファストcgi sudo apt-get で libfcgi-dev をインストールします スポーン-fcgi apt-get をインストール spawn-fcgi プログラムの作成と実行 #include <iostream> #include "fcgio.h" 名前空間 std を使用します。 int main(void) { // stdioストリームバッファをバックアップする ストリームバッファ * cin_streambuf = cin.rdbuf(); ストリームバッファ * cout_streambuf = cout.rdbuf(); ストリームバッファ *cerr_streambuf = cerr.rdbuf(); FCGX_Request リクエスト; FCGX_Init(); FCGX_InitRequest(&request, 0, 0); (FCGX_Accept_r(&request) == 0) の間 { fcgi_streambuf cin_fcgi_streambuf(リクエスト.in); fcgi_streambuf cout_fcgi_streambuf(リクエスト.out); fcgi_streambuf cerr_fcgi_streambuf(リクエスト.err); cin.rdbuf(&cin_fcgi_streambuf); cout.rdbuf(&cout_fcgi_streambuf); cerr.rdbuf(&cerr_fcgi_streambuf); cout << "コンテンツタイプ: text/html\r\n" << "\r\n" << "<html>\n" << " <head>\n" << " <title>Hello, World!</title>\n" << " </head>\n" << " <本文>\n" << " <h1>こんにちは、世界!</h1>\n" << " </body>\n" << "</html>\n"; } cin.rdbuf(cin_streambuf); cout.rdbuf(cout_streambuf); cerr.rdbuf(cerr_streambuf); 0を返します。 プログラムのコンパイル g++ cgi.cpp -o cgidemo -lfcgi nginx設定ファイルを変更する vi /usr/local/nginx/conf/nginx.conf nginxを起動する nginx -c /usr/local/nginx/conf/nginx.conf ブラウザ http://*******:80 から nginx が正常に起動していることを確認します。 spwan-cgiプロセスを開始する spawn-fcgi -a 127.0.0.1 -C 20 -p 7070 ./cgidemo 要約する 上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。 以下もご興味があるかもしれません:
|
<<: Vue.js ソースコード解析のカスタム手順の詳細な説明
>>: MySQLのジョイントインデックス機能の分析と使用例
SVG は、さまざまな利点があるため、近年広く使用されています。残念ながら、WeChat ミニプログ...
この記事では、キャンバスとjsを使用して簡単な飛行機戦争を実装する方法を参考までに紹介します。具体的...
1. 複雑なSQLクエリ1.1. 単一テーブルクエリ(1)指定の列を選択する[例] 全生徒の生徒ID...
<br />原文: http://andymao.com/andy/post/80.ht...
目次序文VMware クローン仮想マシン (準備、3 台の仮想マシンのクローン、1 台のマスター、2...
サーバーへのファイルのアップロード、ソフトウェアのインストール、コマンドやスクリプトの実行、サービス...
ラベル表示モード(重要) divタグとspanタグ1. スタイルはまったく同じですが、ラベルが異なり...
目次1. 背景2. ローカルカスタム指示3. グローバルカスタム指示4.1 カスタムコマンドフック関...
自己学習型ゲーム開発の道において、最も充実した瞬間は、自分でミニゲームを作り、友達と共有して試しにプ...
実際の開発ではポップアップウィンドウがよく使われます。CSS3を勉強していたときに、閉じることができ...
まずは見てみましょう。 HTML ソースコード: XML/HTML コードコンテンツをクリップボード...
HTML にオーディオ ファイルを挿入した後 (mp3 ファイルを再生した後) に発生したいくつかの...
この記事には、細かい点は一切なく、カラーマッチングのテクニックをシェアするだけです。とてもシンプルで...
目次成果を達成する実装コード最近、会社でelementUIを使い始めたため、開発の過程でテーブルのセ...
この記事では、アコーディオンを実装するためのjQueryの具体的なコードを参考までに紹介します。具体...