ゴルゴニアは、GOの機械学習を促進するのに役立つライブラリです。多次元配列を含む数学的方程式を簡単に記述して評価します。これがTheanoまたはTensorflowのように聞こえる場合、それはアイデアが非常に似ているからです。具体的には、ライブラリはTheanoのようにかなり低レベルですが、Tensorflowのような目標が高いです。
ゴルゴニア:
Gorgoniaの主な目標は、複数のマシンに拡大できる高性能の機械学習/グラフ計算ベースのライブラリになることです。 Go(Simple Compilation and Deployment Process)の魅力をMLの世界にもたらすはずです。現在はそこから長い道のりですが、赤ちゃんの階段はすでにそこにあります。
ゴルゴニアの二次的な目標は、非標準の深い学習およびニューラルネットワーク関連のものを探索するためのプラットフォームを提供することです。これには、ネオヘビアンの学習、コーナーカットアルゴリズム、進化的アルゴリズムなどが含まれます。
ゴルゴニアを使用する主な理由は、開発者の快適さです。 Go Stackを広範囲に使用している場合は、すでに慣れていて快適な環境で生産対応の機械学習システムを作成する機能にアクセスできるようになりました。
ML/AI全体は、通常、2つの段階に分割されます。さまざまなモデル、テスト、および再テストを構築する実験段階。そして、テストされてプレイされた後のモデルが展開される展開された状態が展開されます。これには、データサイエンティストやデータエンジニアなどのさまざまな役割が必要です。
通常、2つのフェーズには異なるツールがあります。Python(Pytorchなど)が一般的に実験段階に使用され、その後、モデルはC ++(DLIB、MLPackなどを使用)などのよりパフォーマンスのある言語で書き直されます。もちろん、今日ではギャップが閉じており、人々は頻繁にそれらの間のツールを共有しています。 Tensorflowは、ギャップを橋渡しするツールの1つです。
ゴルゴニアは、同じことをすることを目指していますが、GO環境を目指しています。 Gorgoniaは現在かなりパフォーマンスがあります - その速度はPytorchおよびTensorflowのCPU実装に匹敵します。 GPUの実装は、重いCGO税のために比較するのが少し気味が悪いですが、これが積極的な改善の分野であることは安心です。
パッケージはGOTTABLE: go get -u gorgonia.org/gorgonia 。
GorgoniaはGOモジュールと互換性があります。
最新のドキュメント、参照、およびチュートリアルは、https://gorgonia.orgの公式Gorgonia Webサイトにあります。
Gorgoniaのプロジェクトには、GopherslackにSlackチャンネルとTwitterアカウントがあります。公式の更新と発表は、これら2つのサイトに投稿されます。
Gorgoniaは、計算グラフを作成してから実行することで機能します。それはプログラミング言語と考えますが、数学的機能に限定されており、分岐機能はありません(if/thenまたはループなし)。実際、これはユーザーが考えることに慣れておくべき支配的なパラダイムです。計算グラフはASTです。
MicrosoftのCNTKは、その脳のcntkを、おそらく計算グラフを構築して計算グラフを実行することは異なるものであり、ユーザーがそれらを説明するときに異なる思考モードにあるべきであるという考えを例示するのに最適です。
Gorgoniaの実装は、CNTKのBrainscriptに関しては思考の分離を強制しませんが、構文は少し役立ちます。
例は例です - 数学式z = x + yを定義したいとします。これがあなたがそれをする方法です:
package gorgonia_test
import (
"fmt"
"log"
. "gorgonia.org/gorgonia"
)
// Basic example of representing mathematical equations as graphs.
//
// In this example, we want to represent the following equation
// z = x + y
func Example_basic () {
g := NewGraph ()
var x , y , z * Node
var err error
// define the expression
x = NewScalar ( g , Float64 , WithName ( "x" ))
y = NewScalar ( g , Float64 , WithName ( "y" ))
if z , err = Add ( x , y ); err != nil {
log . Fatal ( err )
}
// create a VM to run the program on
machine := NewTapeMachine ( g )
defer machine . Close ()
// set initial values then run
Let ( x , 2.0 )
Let ( y , 2.5 )
if err = machine . RunAll (); err != nil {
log . Fatal ( err )
}
fmt . Printf ( "%v" , z . Value ())
// Output: 4.5
}あなたは、それが似たような性質の他のパッケージよりも少し冗長であることに注意するかもしれません。たとえば、呼び出し可能な関数にコンパイルする代わりに、Gorgoniaは、実行するには*TapeMachine必要な*programに特にコンパイルされます。また、手動でLet(...)呼び出しが必要です。
著者は、これは良いことだと主張したいと思います - 自分の思考を機械ベースの思考に変えることです。物事がうまくいかない可能性があることを理解するのに大いに役立ちます。
さらに、分岐のサポートはありません。つまり、条件(if/else)またはループはありません。目的は、チューリング複雑なコンピューターを構築することではありません。
より多くの例がプロジェクトのサブフォルダーのexampleに存在し、段階的なチュートリアルがメインのウェブサイトに存在します
ゴルゴニアには、箱から出してCudaのサポートが付属しています。 Gorgonia.orgのWebサイトでCUDAがどのように動作するかについての参照ドキュメントをご覧ください。または、チュートリアルにジャンプしてください。
バージョン化にはSemver 2.0.0を使用しています。 1.0の前に、ゴルゴニアのAPIはかなり変化すると予想されます。 APIは、エクスポートされた関数、変数、およびメソッドによって定義されます。開発者の正気については、バージョン1.0の前に適用するというSemverにはわずかな違いがあります。それらは以下に列挙されています:
GorgoniaのAPIは現在、安定しているとは見なされていません。バージョン1.0フォワードから安定します。
ゴルゴニアは、GOのマスターブランチの下に2つのバージョンをサポートしています。これは、GorgoniaがGoの現在にリリースされたバージョンをサポートし、最大4つの以前のバージョンをサポートすることを意味します。可能であれば、シムが提供されます(新しいsort APIや、Go 1.9で出たmath/bitsなど)。
Goの現在のバージョンは1.13.1です。 Gorgoniaがサポートする最古のバージョンは1.11.xですが、Gonumは1.12+のみをサポートしています。したがって、マスターブランチを実行する最小GOバージョンはGO> 1.12です。
ゴルゴニアが実行されます:
他のプラットフォームでゴルゴニアをテストした場合は、このリストを更新してください。
Gorgoniaは、いくつかの純粋なアセンブラー命令を使用して、いくつかの数学的操作を加速します。残念ながら、AMD64のみがサポートされています。
明らかに、おそらくGithubでこれを読んでいるので、Githubはこのパッケージに貢献するためのワークフローの大部分を形成します。
参照:convributing.md
すべての貢献は大歓迎です。ただし、重要な貢献者と呼ばれる新しいクラスの貢献者がいます。
重要な貢献者は、図書館がどのように機能するか、および/またはその周辺を深く理解していることを示しています。重要な貢献を構成するものの例は次のとおりです。
重要な貢献者リストは、月に1回更新されます(Gorgoniaを使用している場合)。
現在のサポートの最良の方法は、GitHubでチケットを開くことです。
runtime.GC()呼び出しがあるように見えるのはなぜですか?これに対する答えは簡単です - パッケージの設計は特定の方法でCUDAを使用します。具体的には、パッケージレベルではなく、CUDAデバイスとコンテキストがVMに結び付けられています。これは、作成されたすべてのVMに対して、 VMごとにデバイスごとに異なるCUDAコンテキストが作成されることを意味します。このようにして、すべての操作は、CUDAを使用している可能性のある他のアプリケーションとうまく再生されます(ただし、これはストレステストする必要があります)。
CUDAのコンテキストは、 VMがガベージを収集したときにのみ破壊されます(ファイナルライザー機能の助けを借りて)。テストでは、約100 VMが作成され、ほとんどの場合ガベージコレクションはランダムと見なすことができます。これは、使用されているコンテキストが多すぎるため、GPUがメモリがなくなる場合につながります。
したがって、GPUを使用する可能性のあるテストの終わりに、GPUの記憶を解放するためにruntime.GC()コールが行われます。
生産では、多くのVMを開始する可能性は低いため、問題ではありません。ある場合は、GitHubにチケットを開くと、 VM sのFinish()メソッドの追加を検討します。
ゴルゴニアは、Apache 2.0のバリアントの下で認可されています。重要な貢献者でない限り(たとえば、パッケージの商業サポートを提供する)、パッケージから直接商業的に利益を得ることができないことを除いて、Apache 2.0ライセンスと同じです。ゴルゴニアの派生物から直接利益を得ることはまったく問題ありません(たとえば、ゴルゴニアを製品のライブラリとして使用する場合)
誰もがまだ商業目的でゴルゴニアを使用することを許可されています(たとえば、ビジネスのためにソフトウェアでそれを使用してください)。
ゴルゴニアが使用する依存関係はほとんどありません - そして、それらはすべてかなり安定しているため、今のところベンダー化ツールの必要はありません。これらは、Gorgoniaが呼ぶ外部パッケージのリストであり、このパッケージが持っている(サブパッケージは省略されている)順番にランク付けされています。
| パッケージ | に使用されます | 活力 | メモ | ライセンス |
|---|---|---|---|---|
| Gonum/Graph | ソート*ExprGraph | 重要な。除去は、ゴルゴニアが機能しないことを意味します | ゴルゴニアの開発は、最も更新されたバージョンに追いつくことに取り組んでいます | Gonumライセンス(MIT/BSD-like) |
| ゴナム/ブラズ | テンソルサブパッケージ線形代数操作 | 重要な。除去は、ゴルゴニアルが機能しないことを意味します | ゴルゴニアの開発は、最も更新されたバージョンに追いつくことに取り組んでいます | Gonumライセンス(MIT/BSD-like) |
| cu | CUDAドライバー | CUDA運用に必要です | ゴルゴニアと同じメンテナー | MIT/BSDのような |
| Math32 | float32操作 | float32(math.XXX(float64(x)))に置き換えることができます | ゴルゴニアと同じメンダー、組み込みのmathパッケージと同じAPI | MIT/BSDのような |
| hm | ゴルゴニアのタイプシステム | Gorgoniaのグラフは、タイプシステムとかなりしっかりと結合しています | ゴルゴニアと同じメンテナー | MIT/BSDのような |
| VECF64 | 最適化[]float64操作 | tensor/genlibパッケージで生成できます。ただし、多くの最適化が行われました/行われます | ゴルゴニアと同じメンテナー | MIT/BSDのような |
| VECF32 | 最適化[]float32操作 | tensor/genlibパッケージで生成できます。ただし、多くの最適化が行われました/行われます | ゴルゴニアと同じメンテナー | MIT/BSDのような |
| セット | さまざまなセット操作 | 簡単に交換できます | 過去1年間の安定したAPI | ライセンスの設定(MIT/BSD-like) |
| Gographviz | グラフの印刷に使用されます | グラフ印刷は、デバッグにのみ不可欠です。ゴルゴニアはなくても生き残ることができますが、主要な(しかし間違いなく非生じる)機能の損失があります | 2017年4月12日の最終更新 | Gographvizライセンス(Apache 2.0) |
| RNG | ヘルパー関数を実装して初期重みを生成するために使用されます | かなり簡単に交換できます。ゴルゴニアは、利便性の機能なしにもできます | RNGライセンス(Apache2.0) | |
| エラー | エラーラッピング | ゴルゴニアはそれなしで死ぬことはありません。実際、Gorgoniaは過去にGoErrors/エラーも使用しています。 | 過去6か月間の安定したAPI | エラーライセンス(MIT/BSD-like) |
| ゴナム/マット | Tensorとゴナムのマトリックス間の互換性 | ゴルゴニアの開発は、最も更新されたバージョンに追いつくことに取り組んでいます | Gonumライセンス(MIT/BSD-like) | |
| 証言/主張します | テスト | なしで行うことはできますが、テストするためにお尻の大きな痛みになります | ライセンスを証言する(MIT/BSD-like) |
これらは、ゴルゴニア(使用されたGOパッケージは既に上記で宣言されている)を書くプロセスでインスピレーションを与え、適応したパッケージとライブラリです。
| ソース | それがどのように使用されるか | ライセンス |
|---|---|---|
| numpy | 大部分に影響を与えました。いくつかの方法に直接適合したアルゴリズム(ドキュメントで明示的にラベル付け) | MIT/BSDのような。 Numpyライセンス |
| シーノ | 大部分に影響を与えました。 (不明:直接適応アルゴリズムの数) | MIT/BSDのようなTheanoのライセンス |
| カフェ | im2colとcol2im 、Caffeから直接採取されています。元のCaffeeメソッドに触発された畳み込みアルゴリズム | カフェライセンス |