ディープニューラルネットワークの分散トレーニングの概要: 一般的な方法とテクニックの包括的な概要

ディープニューラルネットワークの分散トレーニングの概要: 一般的な方法とテクニックの包括的な概要

独立研究者の Karanbir Chahal 氏と Manraj Singh Grover 氏は、IBM 研究者の Kuntal Dey 氏と共同で、トレーニング アルゴリズム、最適化手法、ノード間の通信方法など、ディープ ニューラル ネットワークの分散トレーニング方法の包括的かつ体系的な概要を示す論文を最近発表しました。 Synced は、論文の主な内容を抜粋して紹介します。数学的推論プロセスとアルゴリズムの手順の詳細な解釈については、元の論文を参照してください。

[[248730]]

論文アドレス: https://arxiv.org/abs/1810.11787

ディープラーニングは人工知能の分野に驚異的な進歩をもたらしました。ただし、ディープラーニング モデルのトレーニングには、かなりの計算量が必要になることに注意する必要があります。 ImageNet などのベンチマーク データセットのトレーニングは、最新の GPU を搭載した 1 台のマシンで完了するまでに最大 1 週間かかることがありますが、研究者は、トレーニングを複数のマシンに分散するとトレーニング時間が大幅に短縮されることを観察しています。最近の研究では、2048 個の GPU のクラスターを使用することで、ImageNet のトレーニング時間が 4 分に短縮されました。このホワイト ペーパーでは、分散トレーニングのさまざまなアルゴリズムとテクニックをまとめ、最新の分散トレーニング フレームワークの現在のベスト プラクティスを紹介します。具体的には、分散確率的勾配降下法の同期および非同期のバリエーション、さまざまな All Reduce 勾配集約戦略、混合精度トレーニング、大規模バッチ トレーニング、勾配圧縮など、クラスターでより高いスループットとより低いレイテンシを実現するためのベスト プラクティスを調査しました。

1. はじめに

(1)背景と動機

データは前例のない規模で生成されています。大規模なインターネット企業は毎日テラバイト単位のデータを生成しており、意味のある洞察を引き出すにはそれを効果的に分析する必要がある[1]。新たなディープラーニングは、この分析を実行するための強力なツールであり、これらのアルゴリズムは、視覚[2]、言語[3]、および知的推論[4]の分野における複雑なタスクで最先端の結果を達成しています。残念ながら、これらのアルゴリズムを効果的にトレーニングするには大量のデータが必要であり、それには多くの時間がかかります。 ImageNet 分類タスクで最先端の結果を達成した最初のディープラーニング アルゴリズムは、単一の GPU でトレーニングするのに丸 1 週間かかりました。現代では、現在のモデルのトレーニングに使用されるデータは ImageNet データセットのサイズをはるかに上回っているため、この速度では十分ではありません。単一 GPU モデルの精度を維持しながら、ディープラーニング トレーニングを水平方向に拡張する必要性が本質的に存在します。理想的には、このトレーニングの速度はマシンの数に応じて直線的に増加し、耐障害性があり、高遅延のネットワーク条件下でも収束できる必要があります。

(2)分散トレーニングの概要

ニューラル ネットワークの分散トレーニングは、データ並列処理とモデル並列処理の 2 つの方法で実現できます。データ並列処理の目的は、データセットをシステムのノード全体に均等に分散することです。各ノードには、ニューラル ネットワークのコピーとそのローカル ウェイトが含まれます。各ノードはデータセットの異なるサブセットを処理し、ローカルの重みセットを更新します。これらのローカル重みはクラスター全体で共有され、累積アルゴリズムを通じて新しいグローバル重みのセットが計算されます。これらのグローバル ウェイトはすべてのノードに配布され、ノードはそれに基づいて次のデータ バッチを処理します。

モデルの並列化は、モデルのアーキテクチャを異なるノードに分割することで分散トレーニングを実現します。 AlexNet [2]は、モデルがメモリに収まるようにネットワークを2つのGPUに分割することでモデル並列処理を採用した最も初期のモデルの1つでした。モデル アーキテクチャが大きすぎて単一のマシンに収まらない場合、およびモデルの一部を並列化できる場合に、モデル並列処理を適用できます。モデル並列処理は、境界ボックスの描画とクラス予測の部分が互いに独立しているオブジェクト検出ネットワーク[5]などの一部のモデルで使用できます。一般的に、ほとんどのネットワークは 2 つの GPU にしか割り当てることができず、達成できるスケーラビリティの量が制限されるため、このホワイト ペーパーでは主にデータの並列処理に焦点を当てています。

この論文は大きく分けて6つの章に分かれています。最初のセクションでは、既存の最適化トレーニング アルゴリズムを紹介します。セクション 2 では、ネットワーク内のノードを接続するために使用される通信戦略に焦点を当てます。セクション 3 では、低電力デバイスや低速ネットワークでの効率的なトレーニングを実現するための、大規模バッチ トレーニング、勾配圧縮、混合精度トレーニングなどの具体的な手法について説明します。セクション 4 では、前のセクションの情報を要約し、さまざまな設定に最適なトレーニング アルゴリズムと通信プリミティブを選択します。最後の 2 つのセクションは、将来の研究の方向性と結論です。

2. 分散トレーニングフレームワークのコンポーネント

(1)分散学習アルゴリズム

分散設定でのトレーニングに使用される一般的なアルゴリズムは確率的勾配降下法 (SGD) であり、これについては今後の議論の焦点となります。 SGDについて述べた原理は、Adam [6]、RMSProp [7]などの他の一般的に使用されている最適化アルゴリズムに簡単に移植できることを指摘することが重要です[8]。分散 SGD は、非同期 SGD と同期 SGD の 2 つの種類に大別できます。

同期SGD[9]の目標は、分散設定と同様にアルゴリズムを複製し、ネットワーク内のノードを緊密に結合することです。非同期SGD[10]は、ノード間の依存性を減らすことで、異なるノード間の結合を排除します。この分離により並列化が強化されますが、残念ながら安定性と精度が若干低下するという副作用があります。同期 SGD との精度のギャップを狭めるために、非同期 SGD に対するいくつかの変更が提案されています。最近の研究の傾向は、同期 SGD をスケールアップすること、より具体的には、大規模なバッチでネットワークをトレーニングすることであり、優れた結果が得られています。

ミニバッチ サイズが大きいといくつかの利点がありますが、主な利点は、大きなミニバッチでトレーニングする場合、モデルがより大きなストライドで局所最小値に到達できるため、最適化プロセスを高速化できることです。しかし実際には、大きなバッチを使用すると、発散の問題や「一般化ギャップ」が発生する可能性があり、ネットワークのテスト精度が、より小さなバッチでトレーニングされたモデルよりも低くなることがあります。最近のいくつかの研究では、バッチサイズに比例して学習率を調整することで、大規模なバッチでのトレーニングが可能になりました。実験により、バッチサイズを大きくすることは学習率を下げることと同等であることがわかっています[11]。また、トレーニングに大きなバッチを使用すると、トレーニング中に更新する必要があるパラメータの合計が少なくなるという追加の利点もあります。バッチサイズを8096に増やし、線形学習率スケーリングを使用することで、ImageNet [12]でのトレーニングは1時間以内に完了することができます[9]。 LARS[13]と呼ばれる技術は最大32kのバッチサイズをサポートしており、最近では[14]の混合精度トレーニングと組み合わせて、64kのバッチサイズを使用して4分でImageNetデータベースのトレーニングに成功しました。

(2)ノード間の通信

分散トレーニングには、ノード間のデータ通信というもう 1 つの重要な要素があります。 GFS[15]やHadoop[16]などの分散ファイルシステムのおかげで、これは成熟した研究テーマになりました。ノード間のポイントツーポイント方式での効率的かつ帯域幅を考慮した通信を可能にするには、集合通信プリミティブ[17]が必要です。これは、最初に高性能コンピューティング(HPC)システムで導入され、後にディープラーニングの分野にも持ち込まれました[18]。 TensorFlow [19]やPyTorchなどの最新のディープラーニングフレームワークでは、相互接続されたノード間の勾配転送を最適な時間で行うことができるため、All Reduceプロセスにこれらのプリミティブを使用しています。 All Reduce[17]には、Ring All Reduce、Recursive Halfing/Doubling、Binary Blocksアルゴリズムなど、実用的なアプリケーションでは多くのバリエーションがあります。

分散トレーニングでは、効果的な水平展開を実現するために、コンピューティングと通信の構成を最適化する必要があります。通信ステップが効率的で、各マシンの計算と同期されている場合、つまり、クラスター全体の計算がほぼ同時に終了する場合、トレーニングは最適になります。ネットワーク速度が遅いと、ノード間の通信がボトルネックになります。勾配圧縮と混合精度トレーニングはどちらも、ネットワークの全体的なスループットを向上させることができる有望な技術です。最近の研究[20]では、周期的な学習率を使用すると、ネットワークの収束を達成するために必要なエポック数を10分の1に削減できることがわかっており、分散トレーニングにおける有望な研究方向となっています。

(3)確率的勾配降下法(SGD)の変種

確率的勾配降下法[21]はニューラルネットワークの訓練に使用される最適化アルゴリズムである。これは勾配降下法の一種で、バックプロパゲーションの各ステップの後に結果が最小値に近づくように重みを調整するアルゴリズムです。 SGD は、個々のトレーニング例ではなくミニバッチを処理するという点で、単純な勾配降下法とは異なります。その形式は次のとおりです。

ここで、w_(t+1)は現在のバッチに対して計算された重み、nはミニバッチ内のトレーニング例の数、∇l(x, w_t)は前のトレーニング例に対して計算された勾配です。

分散型の場合、SGD は非同期 SGD と同期 SGD の 2 つのカテゴリに大まかに分けられます。次の章では、これら 2 つの SGD とそのバリエーションについて詳しく説明します。

3. 同期SGD

同期 SGD は分散勾配降下アルゴリズムであり、分散トレーニングで最も一般的に使用される最適化方法の 1 つです。ネットワーク内のノードは、まずローカルのデータ バッチの勾配を計算し、次に各ノードがその勾配をマスター サーバーに送信します。マスターはこれらの勾配を平均化して蓄積し、重み更新ステップ用の新しいグローバル勾配セットを構築します。これらのグローバル勾配は、単一マシン SGD と同じレシピを使用して各ノードのローカル重みを更新するために使用されます。このプロセス全体は、単一のマシン上の単一のミニバッチのデータに対してフォワードパスとバックプロパゲーションのステップを計算することに似ているため、同期 SGD は収束することが保証されます。しかし、同期 SGD にもいくつかの制限があります。

4. 非同期SGD

非同期 SGD は、異なるノード上のデータの異なるサブセットを使用して複数のモデルのコピーを並行してトレーニングできる分散勾配降下アルゴリズムです。各モデルレプリカは、パラメータ サーバーからグローバル ウェイトを要求し、ミニバッチを処理して勾配を計算し、それをパラメータ サーバーに送り返します。パラメータ サーバーはそれに応じてグローバル ウェイトを更新します。各ノードは勾配を独立して計算し、相互にやり取りする必要がないため、独自のペースで動作でき、マシン障害に対してより堅牢です。つまり、1 つのノードに障害が発生した場合でも、他のノードは処理を続行できるため、同期 SGD によって発生する同期バリアの問題が解消されます。

5. リングアルゴリズム

[17]のRing All Reduceは、scatter-reduceとall gatherの2つのアルゴリズムを組み合わせています。

図1: リングアルゴリズム

Scatter Reduce は p-1 ステップで動作します。ここで、p はマシンの数です。勾配ベクトルは p 個のブロックに分割されます。

アルゴリズム1: リングアルゴリズムの分散削減

分散削減プロセスが終了すると、各マシンは最終結果の一部を取得します。これで、各マシンは結果の一部を他のすべてのマシンにブロードキャストするだけで済みます。これは、受信データがいくらか削減され、最終結果としてのみ保存されることを除いて、スキャッター ギャザーと非常によく似たオール ギャザー プロセスを使用して実行されます。

アルゴリズム2: リングアルゴリズムの全体集合

6. 再帰的半減・倍増アルゴリズム

[17]の再帰距離倍増およびベクトル半減アルゴリズムは、次の4つの異なるプリミティブを使用します。

  • 再帰的なベクトルの半分化: ベクトルは各時間ステップで半分になります。
  • 再帰的なベクトル乗算: さまざまなプロセスに分散されたベクトルの小さな断片が再帰的に収集され、大きなベクトルが構築されます。
  • 再帰的な距離の半分化: 通信の反復ごとにマシン間の距離が半分になります。
  • 再帰的な距離の倍増: 通信の反復ごとにマシン間の距離が 2 倍になります。

図2: 半分にすることと2倍にすることのアルゴリズム

Ring アルゴリズムと同様に、この All Reduce アルゴリズムも、scatter-reduce と all gather の 2 つのプロセスで構成されます。このアルゴリズムとリング アルゴリズムの違いは、これらの手順が操作を実行する方法です。

アルゴリズム3: 散布縮小ベクトル半減アルゴリズム

アルゴリズム4: オールギャザーベクトル乗算アルゴリズム

7. バイナリブロックアルゴリズム

バイナリ ブロック アルゴリズムは、再帰距離 2 倍化およびベクトル 2 分の 1 化アルゴリズムの拡張です。その目的は、マシンの数が 2 の累乗ではない場合に負荷の不均衡を減らすことです。2 の累乗ではない場合の元のアルゴリズムでは、一部のマシンはアルゴリズムが終了するまでアイドル状態になり、その後結果のベクトルを受け取ります。このアプローチでは、場合によっては多数のマシンがアイドル状態になる可能性があります。たとえば、600 台のマシンのクラスターの場合、86 台のマシンがアイドル状態になり、プロセスは他の 512 台のマシンでのみ実行されます。このアプローチを使用すると、重大な負荷の不均衡が生じる可能性があります。

バイナリ ブロック アルゴリズムは、マシンの数を 2 の累乗の複数のモジュールに分割することで、この問題を軽減します。たとえば、600 台のマシンのクラスターは、各グループに 2^9、2^6、2^4、および 2^3 台のマシンが含まれる 4 つのグループに分割できます。

アルゴリズム 5: バイナリ ブロック マスター サーバー アルゴリズム

アルゴリズム 6: 分散削減マスタークライアントアルゴリズム

8. フォールトトレラントなオールリデュース

分散クラスターが信頼性の低いデバイスで構成されている場合、マシン障害が発生すると、All Reduce アルゴリズムを再起動する必要があります。我々は、Raftコンセンサスアルゴリズム[31]の要素をAll Reduceに統合したフォールトトレラントなバイナリブロックアルゴリズムを提案する。このアルゴリズムはマシン障害に対して耐性があり、バックアップ コピーが動作している限り実行を継続できます。

図3: ラフトアルゴリズム

9. バッチサイズを調整する

実際にディープ ニューラル ネットワークをトレーニングする場合、複数のエポックのトレーニングの後に学習率は徐々に低下します。この背後にある直感的なアイデアは、トレーニングの初期段階では重み付けを大きくしておき、モデルが収束に近づくにつれて重み付けを小さくするというものです。これは実際には非常にうまく機能し、固定学習率でトレーニングされたモデルよりも優れた収束を達成できます。これは非常に効率的なアプローチでもあり、最初に大きな学習率を使用すると、小さな学習率で微調整する前に良好な進捗を実現できます。しかし、トレーニングに大きなバッチサイズを使用することは、トレーニングプロセスを大幅に高速化し、トレーニング時間を数日から数分に短縮できるため、有望な研究方向です([9、14、13]を参照)。 [11]の研究では、バッチサイズの増加は学習率の低下と同等であることを実験的に実証することで、この傾向をさらに強化しています。

より大きなバッチ サイズでトレーニングする利点は、モデルが実行する全体的な重みの更新が少なくなり、トレーニングが高速になることです (図 4 を参照)。ただし、大きなバッチで直接トレーニングすると、より小さなバッチ サイズでトレーニングされたモデルと比較して、早期の発散や最終検証精度の低下などの問題が発生する可能性もあります。

図4: 学習率の低下とバッチサイズの増加 [11]

10. テンソル融合

ResNet のような一般的なモデルの場合、勾配計算に使用されるテンソルのサイズが非常に小さいことが研究者によって観察されています。より具体的には、畳み込み層に使用される勾配テンソルのサイズは、完全畳み込み層に使用される勾配テンソルのサイズよりもはるかに小さくなります。これは重要なことです。なぜなら、少量のデータを有線で送信すると、ネットワーク帯域幅を十分に活用できず、大きな遅延が発生する可能性があるからです。この問題を解決する簡単な方法はテンソル融合[14]です。これは、複数の小さなテンソルを融合して、少なくとも特定の最小サイズよりも大きいテンソルを形成し、この融合テンソルをネットワークを介して送信することを意味します。この融合を実行する利点は、各マシンの起動時の負荷が軽減され、ネットワーク トラフィックの全体的な頻度が削減されることです。これにより、ネットワークの乱雑さが軽減され、最適な時間でタスクを完了できるようになります。ただし、小さなテンソルにテンソル融合を使用すると、Ring All Reduce の効率が低下し、速度が遅くなる可能性があります。 [14]は、多層マスタースレーブ設定を使用した階層型All Reduceを提案し、このアプローチによりレイテンシを短縮できることが観察されました。この階層化された All Reduce は、すべてのマシンを異なるバッチに分割し、各バッチがマスター ノードを選択して勾配を集約することによって機能します。これらのマスター ノードは、自身に対して Ring All Reduce を実行し、その後、マスター ノードは更新された勾配をそれぞれのスレーブ ノードに配布します。この戦略は、バッチ数を減らすことでレイテンシのオーバーヘッドを削減し、それによって Ring All Reduce のオーバーヘッドを徐々に削減することです。テンソル融合を使用すると、小規模ネットワークの処理が削減され、ネットワーク全体の速度が向上するため、強くお勧めします。このアプローチは、Horovord [38]やTencentのフレームワーク[14]などの産業システムで広く使用されており、現代の分散トレーニングフレームワークの重要なメンバーとなっています。

11. 低精度トレーニング

ImageNetデータベース[12]上でResNetモデル[29]をトレーニングする最速時間は現在4分[14]です。この研究では、研究者らは低遅延のゼロコピー RDMA ネットワークを使用して 2048 個の GPU を接続し、LARS アルゴリズム、ハイブリッド All Reduce アルゴリズム、テンソル融合、および混合精度トレーニングを組み合わせて使用​​しました。 Hybrid All Reduce アルゴリズムは、Ring All Reduce と階層バージョンを組み合わせ、現在のステップのテンソル サイズに基づいて切り替えます。彼らはまた、混合精度トレーニング[39]という新しいアプローチを使用して、この全体的なトレーニング速度の向上を達成しました。結果としてスループットと帯域幅の効率が向上し、トレーニング速度が 8 倍になります。名前が示すように、混合精度トレーニングでは、ニューラル ネットワークをトレーニングするために 2 つの異なるデータ タイプを使用します。ほとんどの操作には小さいデータ タイプを使用し、厳密な精度が要求される操作には大きいデータ タイプを使用します。

ニューラル ネットワークでは、当初、単精度または倍精度の数値をデフォルトのデータ型として使用していました。これは、これらのデータ型が、ネットワークがモデル化しようとしているタスクの表現をキャプチャする際に優れたパフォーマンスを発揮したためです。単精度数は 32 ビットの浮動小数点数であり、倍精度数は 64 ビットの浮動小数点数です。最近の研究では、ニューラルネットワークを低精度のデータ型でトレーニングすることで、ニューラルネットワークの速度とサイズを50%~80%削減できることが示されています[40, 41]。一般的なアプローチは16ビット浮動小数点数(FP16トレーニング)を使用してネットワークをトレーニングすることですが、これらのネットワークは単精度を使用してトレーニングされた同じネットワークよりもテスト精度が低くなります[39]。その主な理由は、重み更新ステップの精度が低いことです。具体的には、低精度の勾配を学習率で乗算すると、値が 16 ビットの範囲をオーバーフローすることがあり、計算が不正確になり、最終的な検証精度が失われます。

混合精度トレーニング[39]は、重みの単精度(32ビット)マスターコピーを使用し、他のすべてを半精度(16ビット)で実行することで、この問題に対処することを目的としています。

混合精度トレーニングでは、より高いスループットを実現できるため、計算と通信のボトルネックが軽減されます。ただし、混合精度トレーニングには、損失や算術精度の低下など、いくつかの注意点があります。

12. 勾配とパラメータの圧縮

分散トレーニング プロセスのスケーリングにおける主なボトルネックとなるのは、ノード間でモデルの重みと勾配を通信するための帯域幅コストが高いことです。このボトルネックは、フェデレーテッドラーニング[42]を使用するデバイス、特にネットワーク帯域幅が低く接続速度が遅いモバイルデバイスでトレーニングする場合に特に顕著になります。この問題に対処するために、研究者はネットワーク帯域幅を効率的に利用するためのさまざまな方法を提案してきました。 SGDの非同期型と同期型を使用すると、ノードは独立して通信できるようになり、同時に並列化も可能になり、ネットワーク帯域幅の利用率がある程度向上します[10、43、44]。勾配圧縮においても大きな進歩が遂げられており、これも有望である[45]。これらの方法は主に、量子化とスパース化という 2 つの考え方に基づいています。

アルゴリズム 7: ノード k における Pure Momentum SGD の深層勾配圧縮

13. 今後の研究

分散トレーニングの分野はここ数年で大きな進歩を遂げており、さらなる革新が期待されています。関連分野では現在、ネットワークが発散したり、同期 SGD の最終的な検証精度が低下したりしなくなるまで、ミニバッチ サイズの制限を増やしています。また、非同期 SGD の古い勾配の問題や最終検証精度の低下に対する解決策も研究しています。低電力デバイスでのトレーニングは、フェデレーテッドラーニング[42]の形で勢いを増しており、安全で分散化されたトレーニングのための最新のディープラーニングフレームワークのいくつかの構成要素が登場しています。消費者向けデバイスでのトレーニングにはいくつかの利点があります。その 1 つは、消費者のインタラクションに基づいて特定の習慣を学習するインテリジェント アプリケーションを構築できると同時に、データを保存してデバイス上でトレーニングを実行することでユーザー データのプライバシーを確​​保できることです。このようなアプリケーションの例としては、デバイス上で小さなパーソナライズされたモデルを学習して次の単語を予測する Android Predictive Keyboard があります。低電力デバイスでのトレーニングにおける主な課題は、利用可能なネットワーク帯域幅と計算リソースが限られていることです。効率的なフレームワークにより、携帯電話や IoT デバイスでの大規模なトレーニングが可能になり、ポータブルなディープラーニング アプリケーションが実現します。 [54]は、強化学習アルゴリズムを使用して異種デバイスのクラスタ上でトレーニングタスクをスケジュールし、低電力デバイスでの分散トレーニングに関する優れた研究を行っています。市販デバイスでの分散トレーニングでは、トレーニングと通信の両方で複数の最適化が必要です。勾配圧縮と混合精度トレーニングは、良い結果が得られる有望な方向性です。全体として、この研究分野は活発かつ革新的であり、より幅広いインテリジェント アプリケーションのコア コンポーネントになる準備ができています。

要約する

分散トレーニング フレームワークのコンポーネントを紹介し、まとめました。効率的でスケーラブルな分散トレーニング フレームワークを構築するには、次の手法をお勧めします。

同期 SGD アルゴリズムは厳密な収束保証があるため、トレーニングに推奨されます。

実行時間が短いため、勾配累積を伴う All Reduce プロセスを実行するには、バイナリ ブロック アルゴリズムを使用する必要があります。

ハードウェアとネットワーク帯域幅を効率的に使用するには、勾配圧縮、量子化、混合精度トレーニングなどのさまざまな手法をフレームワークで使用する必要があります。深層勾配圧縮と混合精度トレーニングを組み合わせて使用​​することをお勧めします。

並列処理を最大化し、実行時間を最小限に抑えるには、非常に大きなバッチ サイズでトレーニングを実行する必要があります。 LARS アルゴリズムは、バッチ サイズが最大 64,000 のネットワークをトレーニングするのに十分な堅牢性があることが示されているため、このアルゴリズムを使用することをお勧めします。

[この記事は51CTOコラム「Machine Heart」、WeChatパブリックアカウント「Machine Heart(id:almosthuman2014)」によるオリジナル翻訳です]

この著者の他の記事を読むにはここをクリックしてください

<<:  モノのインターネット (IoT) 向けトップ 11 クラウド プラットフォーム

>>:  分散機械学習用パラメータサーバー

推薦する

PTC、受賞歴のあるCADプラットフォームの新バージョンを発表し、デザインのルネッサンスを始動

PTC (NASDAQ: PTC) は本日、エンジニアが革新的な設計機能と製造機能を単一の環境で活用...

「盲目的に走った51クレジットカード」は「存亡の危機」から逃れられない

10月21日、51クレジットカードが突然大手メディアの見出しを飾りました。浙江省警察は数百人の警官を...

新年、新たな期待

新年がやってきました。私(ニックネームはgongyiyi、neal)は、Host Catを訪れてくれ...

SEO作業はますます価値が高まっている

Taozui: 検索エンジンはアルゴリズムを常に更新しており、多くの古い SEO 手法は適用できなく...

経験の共有: QQ スペースをマーケティングに活用するには?

QQは中国最大のチャットツールであり、QQ Spaceは多くのユーザーを魅了しています。したがって、...

私の経験に基づいたSEOERへの提案

私は数年間 SEO 業界で働いてきました。初めて SEO という言葉を聞いたときは、とても馴染みのな...

クラウドネイティブの「春」は来るのか?

IT 業界では、従来の IT アーキテクチャを「煙突」アーキテクチャと比較することがよくあります。こ...

Alibaba Cloud: 優れたサービスを提供し、優れたエコシステムを構築し、政府とエンタープライズ業界に注力

[51CTO.comからのオリジナル記事]疫病の触媒の下、クラウドサービスの需要が急増し、国内のクラ...

ウェブサイトの実際のコンテンツは最適化の重要な要素です

SEOに精通検索エンジン最適化 (SEO) とは、ウェブサイトの構造、ウェブページのコード、コンテン...

分散ストレージを構築する場合、分離型またはハイパーコンバージド型のどちらの展開モードを採用する必要がありますか?

コミュニティからのコミュニケーション、参考のみ@baimmi 中国銀聯データセンターの内部システムに...

Canonical タグによる重複コンテンツ コレクションの解決

Canonical タグは、Google、Yahoo、Microsoft などの検索エンジンが共同で...

psychz-99$/E3-1230v2/16g メモリ/Samsung 840 Pro 256G SSD/100m 無制限

fantongphotonvps の独立サーバーブランド psychz が、特別プロモーション付きの...

リベートサイトで巨額の利益が得られるという神話は信用できない。専門家は合理的な投資を呼びかけている

今年4月、太平洋直接購入ネットワークは河南省などで調査と処罰を受け、5月末には福建100%リベートネ...

権威を失わずにウェブサイトのキーワードを調整するためのガイドの簡単な分析

多くのウェブマスターが、ウェブサイトのキーワードを変更したら検索エンジンによって順位が下がってしまっ...

クラウドへの移行を簡素化する新しいクラウドネイティブ オープンソース プロジェクト

エンタープライズ開発者は忙しいです。顧客の期待はかつてないほど高まっており、情報への高速かつ安全なモ...