Gorgonia هي مكتبة تساعد على تسهيل التعلم الآلي في GO. اكتب وتقييم المعادلات الرياضية التي تنطوي على صفائف متعددة الأبعاد بسهولة. إذا كان هذا يبدو مثل theano أو TensorFlow ، فذلك لأن الفكرة متشابهة تمامًا. على وجه التحديد ، المكتبة منخفضة المستوى ، مثل ثيانو ، ولكن لديها أهداف أعلى مثل TensorFlow.
جورجونيا:
الهدف الأساسي لجورجونيا هو أن تكون مكتبة تعليمية/رسم بياني تعليمية عالية الأداء والتي يمكن أن تتوسع عبر آلات متعددة. يجب أن تجلب نداء GO (عملية تجميع ونشر بسيطة) إلى عالم ML. إنه طريق طويل من هناك حاليًا ، ومع ذلك ، فإن خطوات الطفل موجودة بالفعل.
الهدف الثانوي لجورجونيا هو توفير منصة لاستكشاف الأشياء غير المتعلقة بالتعلم العميق والأشكال العصبية. ويشمل ذلك أشياء مثل التعلم الجديد-خوارزميات قطع الزاوية ، والخوارزميات التطورية ، وما شابه.
السبب الرئيسي لاستخدام Gorgonia هو راحة المطور. إذا كنت تستخدم مكدس GO على نطاق واسع ، فستتمكن الآن من الوصول إلى القدرة على إنشاء أنظمة التعلم الآلي الجاهزة للإنتاج في بيئة تكون على دراية بها بالفعل.
عادةً ما يتم تقسيم ML/AI بشكل عام إلى مرحلتين: المرحلة التجريبية حيث يقوم المرء ببناء نماذج واختبارات وإعادة اختبار مختلفة ؛ ويتم نشر الحالة المنشورة حيث يتم اختبار نموذج بعد اختباره ولعبه. هذا يستلزم أدوارًا مختلفة مثل عالم البيانات ومهندس البيانات.
عادةً ما يكون للمرحلتين أدوات مختلفة: يتم استخدام Python (Pytorch ، إلخ) بشكل شائع للمرحلة التجريبية ، ثم يتم إعادة كتابة النموذج في لغة أكثر أداء مثل C ++ (باستخدام DLIB ، MLPACK ETC). بالطبع ، في الوقت الحاضر ، تغلق الفجوة وغالبًا ما يشارك الناس الأدوات بينهما. TensorFlow هي إحدى هذه الأدوات التي تسد الفجوة.
يهدف جورجونيا إلى فعل الشيء نفسه ولكن لبيئة GO. Gorgonia هو حاليًا إلى حد ما - سرعاتها مماثلة لتطبيقات وحدة المعالجة المركزية لـ Pytorch و TensorFlow. تعتبر تطبيقات GPU دقيقة بعض الشيء للمقارنة بسبب ضريبة CGO الثقيلة ، ولكن كن مطمئنًا إلى أن هذا مجال من التحسينات النشطة.
الحزمة قابلة للتطبيق: go get -u gorgonia.org/gorgonia .
Gorgonia متوافق مع وحدات GO.
توجد وثائق ومراجع ودروس تعليمية محدثة على موقع Gorgonia الرسمي على https://gorgonia.org.
يحتوي مشروع Gorgonia على قناة Slack على Gopherslack ، بالإضافة إلى حساب Twitter. سيتم نشر التحديثات والإعلانات الرسمية على هذين الموقعين.
يعمل Gorgonia عن طريق إنشاء رسم بياني حساب ثم تنفيذه. فكر في الأمر كلغة برمجة ، ولكنه يقتصر على الوظائف الرياضية ، وليس لديه قدرة متفرعة (لا إذا/ثم أو حلقات). في الواقع ، هذا هو النموذج المهيمن الذي يجب أن يستخدمه المستخدم للتفكير فيه. الرسم البياني للحساب هو AST.
ربما يكون CNTK من Microsoft ، مع Brainscript ، هو الأفضل في ممارسة فكرة أن بناء رسم بياني حساب وتشغيل الرسوم البيانية للحساب هو أشياء مختلفة وأن المستخدم يجب أن يكون في أوضاع مختلفة من التفكير عند الذهاب إليها.
في حين أن تطبيق Gorgonia لا يفرض فصل الفكر بقدر ما يفعله Cntk's 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 على وجه التحديد في *program يتطلب تشغيل *TapeMachine . كما يتطلب يدويًا مكالمة Let(...) .
يود المؤلف أن يزعم أن هذا شيء جيد - لتحويل تفكير الفرد إلى التفكير القائم على الجهاز. إنه يساعد كثيرًا في معرفة المكان الذي قد تسوء فيه الأمور.
بالإضافة إلى ذلك ، لا يوجد أي دعم للتفرع - بمعنى أنه لا يوجد شرطية (إذا/آخر) أو حلقات. الهدف هو عدم بناء جهاز كمبيوتر تكتمل.
هناك المزيد من الأمثلة موجودة في example المجلد الفرعي للمشروع ، والدروس التعليمية خطوة بخطوة موجودة على الموقع الرئيسي
يأتي Gorgonia مع دعم CUDA خارج الصندوق. يرجى الاطلاع على الوثائق المرجعية حول كيفية عمل CUDA على موقع Gorgonia.org ، أو القفز إلى البرنامج التعليمي.
نستخدم Semver 2.0.0 لإصدارنا. قبل 1.0 ، من المتوقع أن تتغير واجهات برمجة تطبيقات Gorgonia قليلاً. يتم تعريف API بواسطة الوظائف والمتغيرات والأساليب المصدرة. بالنسبة لعقل المطورين ، هناك اختلافات طفيفة في Semver التي سنطبقها قبل الإصدار 1.0. يتم تعدادهم أدناه:
واجهة برمجة تطبيقات Gorgonia هي حتى الآن ، لا تعتبر مستقرة. سيكون مستقرًا من الإصدار 1.0 للأمام.
يدعم Gorgonia نسختين أسفل الفرع الرئيسي لـ GO. هذا يعني أن Gorgonia سوف يدعم الإصدار الحالي الذي تم إصداره من Go ، وما يصل إلى 4 إصدارات سابقة - توفير شيء لا يكسر. حيثما كان ذلك ممكنًا ، سيتم توفير Shim (لأشياء مثل واجهات برمجة تطبيقات sort الجديدة أو math/bits التي خرجت في GO 1.9).
الإصدار الحالي من GO هو 1.13.1. النسخة الأولى التي يدعمها Gorgonia هي GO 1.11.x لكن Gonum يدعم 1.12+ فقط. لذلك ، فإن إصدار الحد الأدنى GO لتشغيل الفرع الرئيسي هو GO> 1.12.
Gorgonia يعمل على:
إذا كنت قد اختبرت Gorgonia على منصات أخرى ، فيرجى تحديث هذه القائمة.
يستخدم Gorgonia بعض تعليمات التجميع النقي لتسريع بعض العمليات الرياضية. لسوء الحظ ، يتم دعم AMD64 فقط.
من الواضح ، نظرًا لأنك على الأرجح تقرأ هذا على Github ، فإن Github ستشكل الجزء الرئيسي من سير العمل للمساهمة في هذه الحزمة.
انظر أيضا: المساهمة
جميع المساهمات موضع ترحيب. ومع ذلك ، هناك فئة جديدة من المساهمين ، تسمى المساهمين المهمين.
أظهر أحد المساهمين المهمين فهمًا عميقًا لكيفية عمل المكتبة و/أو ضواحيها. فيما يلي أمثلة لما يشكل مساهمة كبيرة:
سيتم تحديث قائمة المساهمين المهمين مرة واحدة في الشهر (إذا كان أي شخص يستخدم حتى Gorgonia).
أفضل طريقة للدعم الآن هي فتح تذكرة على Github.
runtime.GC() في الاختبارات؟ الإجابة على هذا بسيطة - يستخدم تصميم الحزمة CUDA بطريقة معينة: على وجه التحديد ، يتم ربط جهاز CUDA والسياق بـ VM ، بدلاً من مستوى الحزمة. هذا يعني لكل VM تم إنشاؤه ، يتم إنشاء سياق CUDA مختلف لكل جهاز لكل VM . وبهذه الطريقة ستلعب جميع العمليات بشكل جيد مع التطبيقات الأخرى التي قد تستخدم CUDA (ومع ذلك ، يجب اختبار هذا الإجهاد).
يتم تدمير سياقات CUDA فقط عندما يتم جمع VM القمامة (بمساعدة وظيفة Finalizer). في الاختبارات ، يتم إنشاء حوالي 100 VM S ، ويمكن اعتبار جمع القمامة في معظم الأحيان عشوائيًا. هذا يؤدي إلى الحالات التي ينفد فيها وحدة معالجة الرسومات من الذاكرة حيث يوجد عدد كبير جدًا من السياقات المستخدمة.
لذلك في نهاية أي اختبارات قد تستخدم GPU ، يتم إجراء مكالمة runtime.GC() .
في الإنتاج ، من غير المرجح أن يبدأ المرء في ذلك العديد من VM S ، وبالتالي فهي ليست مشكلة. إذا كان هناك ، افتح تذكرة على Github ، وسنبحث في إضافة طريقة Finish() لـ VM S.
Gorgonia مرخصة تحت متغير Apache 2.0. إنه نفس ترخيص Apache 2.0 ، باستثناء عدم القدرة على الربح تجاريًا مباشرة من الحزمة إلا إذا كنت مساهماً مهمًا (على سبيل المثال ، توفير الدعم التجاري للحزمة). من الجيد تمامًا الاستفادة مباشرة من مشتق Gorgonia (على سبيل المثال ، إذا كنت تستخدم Gorgonia كمكتبة في منتجك)
لا يزال يُسمح للجميع باستخدام Gorgonia لأغراض تجارية (على سبيل المثال: استخدامه في برنامج لعملك).
هناك عدد قليل جدًا من التبعيات التي يستخدمها Gorgonia - وكلها مستقرة إلى حد ما ، حتى الآن لا توجد حاجة إلى أدوات البصر. هذه هي قائمة الحزم الخارجية التي تسميها Gorgonia ، والتي تم تصنيفها بترتيب الاعتماد على هذه الحزمة (تم حذف الحزم الفرعية):
| طَرد | تستخدم ل | حيوية | ملحوظات | رخصة |
|---|---|---|---|---|
| gonum/الرسم البياني | فرز *ExprGraph | حيوي. الإزالة تعني أن جورجونيا لن يعمل | يلتزم تطوير Gorgonia بمواكبة الإصدار الأكثر تحديثًا | ترخيص Gonum (MIT/BSD-like) |
| Gonum/Blas | عمليات الجبر الخطي الحزمة الفرعية Tensor | حيوي. الإزالة تعني أن gorgonial لن يعمل | يلتزم تطوير Gorgonia بمواكبة الإصدار الأكثر تحديثًا | ترخيص Gonum (MIT/BSD-like) |
| النحاس | سائقي CUDA | اللازمة لعمليات CUDA | نفس المشرف مثل جورجونيا | MIT/BSD-like |
| MATH32 | float32 العمليات | يمكن استبداله بـ float32(math.XXX(float64(x))) | نفس المشرف مثل Gorgonia ، نفس API مثل حزمة math المدمجة | MIT/BSD-like |
| HM | اكتب نظام Gorgonia | الرسوم البيانية لـ Gorgonia مقترنة بإحكام مع نظام النوع | نفس المشرف مثل جورجونيا | MIT/BSD-like |
| VECF64 | العمليات المحسنة []float64 | يمكن إنشاء في حزمة tensor/genlib . ومع ذلك ، تم إجراء/إجراء الكثير من التحسينات | نفس المشرف مثل جورجونيا | MIT/BSD-like |
| VECF32 | العمليات المحسنة []float32 | يمكن إنشاء في حزمة tensor/genlib . ومع ذلك ، تم إجراء/إجراء الكثير من التحسينات | نفس المشرف مثل جورجونيا | MIT/BSD-like |
| تعيين | عمليات مجموعة مختلفة | يمكن استبدالها بسهولة | API مستقر للعام الماضي | تعيين ترخيص (MIT/BSD-like) |
| Gographviz | تستخدم لطباعة الرسوم البيانية | طباعة الرسم البياني أمر حيوي فقط للتصحيح. يمكن لجورجونيا البقاء على قيد الحياة بدونه ، ولكن مع خسارة ميزة (ولكن يمكن القول أنه غير مستقر) | آخر تحديث 12 أبريل 2017 | ترخيص Gographviz (Apache 2.0) |
| RNG | تستخدم لتنفيذ وظائف المساعد لتوليد الأوزان الأولية | يمكن استبدالها بسهولة إلى حد ما. يمكن لـ Gorgonia الاستغناء عن وظائف الراحة أيضًا | ترخيص RNG (Apache 2.0) | |
| الأخطاء | خطأ في التفاف | لن يموت جورجونيا بدونها. في الواقع ، استخدم Gorgonia أيضًا goerrors/الأخطاء في الماضي. | API مستقر خلال الستة أشهر الماضية | رخصة أخطاء (MIT/BSD-like) |
| gonum/mat | التوافق بين مصفوفة Tensor و Gonum | يلتزم تطوير Gorgonia بمواكبة الإصدار الأكثر تحديثًا | ترخيص Gonum (MIT/BSD-like) | |
| الشهادة/التأكيد | الاختبار | يمكن أن تفعل بدون ولكن سيكون ألمًا هائلاً في المؤخرة للاختبار | ترخيص الشهادة (MIT/BSD-like) |
هذه هي الحزم والمكتبات التي ألهمت وتم تكييفها من خلال كتابة Gorgonia (تم الإعلان بالفعل عن حزم GO التي تم استخدامها أعلاه):
| مصدر | كيف يتم استخدامه | رخصة |
|---|---|---|
| numpy | أجزاء كبيرة مستوحاة. خوارزميات تم تكييفها مباشرة لعدد قليل من الطرق (المسمى بشكل صريح في المستندات) | MIT/BSD-like. ترخيص numpy |
| ثيانو | أجزاء كبيرة مستوحاة. (غير متأكد: عدد الخوارزميات المكيفة مباشرة) | رخصة ثيانو مثل MIT/BSD |
| الكافيين | im2col و col2im مأخوذة مباشرة من الكافيين. خوارزميات الالتفاف المستوحاة من أساليب الكافيك الأصلية | ترخيص الكافيين |