Tensor Tensor Tensor <-> GPU Pytorch variabe و GPU Tensor <-> GPU Pytorch متغير ، في بعض الحالات.
نظرًا لوجود بعض الأنظمة ، فإن استخدام موترات وحدة المعالجة المركزية Pytorch المبطنة أسرع من استخدام الموترات الكأس (انظر "كيفية عمل" لمزيد من التفاصيل) ، قمت بإنشاء فئات Pytorch Tensor العامة PytorchModelFactory و PytorchOptimizerFactory التي يمكن أن تحدد إما على التوالي إلى cuda أو cpu ، إذا كنت تستخدم cpu لا تزال فئات GPUPytorchModelFactory الأصلية و GPUPytorchOptimizerFactory في المكتبة ، لذلك لا ينبغي أن يتأثر أي رمز موجود باستخدام Speedtorch. تم تحديث الوثائق لتشمل هذه الفئات الجديدة.
تناقض هذه المكتبة حول الموترات الكأس التي تم تثبيتها في وحدة المعالجة المركزية ، والتي يمكن أن تحقق 3.1x أسرع وحدة المعالجة المركزية -> نقل GPU من CPU Pytorch المعتادة العادية CAN ، و 410x نقل GPU -> وحدة المعالجة المركزية. تعتمد السرعة على مقدار البيانات ، وعدد نوى وحدة المعالجة المركزية على نظامك (انظر قسم كيفية عمله لمزيد من التفاصيل)
تتضمن المكتبة وظائف للتدريب على التضمينات ؛ يمكن أن تستضيف التضمينات على ذاكرة الوصول العشوائي للوحدة المعالجة المركزية أثناء وجودها في وضع الخمول ، وتجنب ذاكرة الوصول العشوائي (GPU).
لقد قمت في البداية بإنشاء هذه المكتبة للمساعدة في تدريب أعداد كبيرة من التضمينات ، والتي قد تواجه GPU مشكلة في الاحتفاظ بالذاكرة. من أجل القيام بذلك ، وجدت أنه من خلال استضافة بعض التضمينات على وحدة المعالجة المركزية يمكن أن تساعد في تحقيق ذلك. أنظمة التضمين تستخدم التدريب Sprase ؛ فقط جزء من إجمالي prameters يشارك في خطوات الأمام/التحديث ، والباقي خاملا. لذلك كنت أحسب ، لماذا لا تبقي معلمات الخمول قبالة وحدة معالجة الرسومات أثناء خطوة التدريب؟ لهذا ، كنت بحاجة إلى وحدة المعالجة المركزية السريعة -> نقل وحدة معالجة الرسومات.
للحصول على خلفية كاملة ، يرجى الاطلاع على صفحة DevPost
https://devpost.com/software/speedtorch-6w5unb
مع وحدة المعالجة المركزية السريعة-> GPU ، يمكن تطوير الكثير من الأساليب المرح للوظائف التي اعتقد الناس سابقًا أنها قد لا تكون ممكنة.
️ دمج speedtorch في خطوط أنابيب البيانات الخاصة بك لنقل البيانات السريعة إلى/من وحدة المعالجة المركزية <-> GPU
️ زيادة معلمات التدريب عبر تخزين وحدة المعالجة المركزية. طالما أن لديك كمية كافية من ذاكرة الوصول العشوائي (CPU) ، يمكنك استضافة أي عدد من التضمينات دون الحاجة إلى القلق بشأن ذاكرة الوصول العشوائي من GPU.
️ استخدم Adadelta و Adamax و RMSPROP و RPROP و ASGD و Adamw و Adam لتدريبات التضمين المتفرق. في السابق ، كانت Spraseadam و Adagrad و SGD فقط مناسبة لأن هذه التدرجات المتفرقة التي تدعم بشكل مباشر فقط.
(تحرير 9-20-19 ، أحد مطوري Pytorch ، أشار إلى بعض الأخطاء البسيطة في رمز وضع علامة على المقعد الأصلي ، تم تحديث القيم والرمز)
فيما يلي دفتر ملاحظات يقارن النقل عبر موترات Speedtorch vs Pytorch ، مع كل من وحدة المعالجة المركزية المثبتة وموترات CUDA. تم إجراء جميع الاختبارات باستخدام مثيل كولاب مع وحدة معالجة الرسومات Tesla K80 ، و 2 وحدة المعالجة المركزية الأساسية.
تحديث 10-17-19: أصبح Google Colab الآن قياسيًا مع 4 وحدات معالجة المركزية الأساسية ، لذلك سيعطي دفتر الملاحظات نتائج مختلفة عن ما هو مذكور أدناه ، لأن kernals الفهرسة من Pytorch تزداد كفاءة مع زيادة عدد نوى وحدة المعالجة المركزية.
https://colab.research.google.com/drive/1pxhbmbzqtiq_nlfguianpf_mfpiqskks
يقوم دفتر الملاحظات هذا بإجراء نقل البيانات من 131،072 تضمينات من البعد 128 ، من وإلى متغيرات الكأس/pytorch ومتغيرات Pytorch ، مع N = 100. تحتوي وحدة المعالجة المركزية من Google Colab على 4 نوى ، والتي لها تأثير على سرعة النقل. سوف ترى وحدة المعالجة المركزية مع عدد أكبر من النوى أقل من Advatage لاستخدام Speedtorch.
الجدول أدناه هو ملخص للنتائج. إن نقل البيانات من موترات Pytorch CUDA إلى متغير تضمين CUDA Pytorch أسرع من مكافئ Speedtorch ، ولكن بالنسبة لجميع أنواع النقل الأخرى ، يكون Speedtorch أسرع. وبالنسبة لمجموع كلتا الخطوتين التي يتم نقلها إلى/من Cuda Pytorch تضمين ، فإن Speedtorch أسرع من المكافئ Pytorch لكل من موترات GPU و CPU العادية.
لقد لاحظت أن مثيلات مختلفة من كولاب تؤدي إلى نتائج مختلفة للسرعة ، لذلك ضع ذلك في الاعتبار أثناء مراجعة هذه النتائج. قد يؤدي المدى الشخصي لدفتر كولاب إلى قيم مختلفة ، على الرغم من أن ترتيب المغناطيس للنتائج هو نفسه بشكل عام.
وترد أوقات النقل في الجداول التالية في ثوان. تم تشكيل هذا المعايير مع مثيل كولاب الذي تحتوي وحدة المعالجة المركزية على نوى. لدى Colab نسخة محترفة من الحالات المدفوعة التي هي 4 وحدات المعالجة المركزية الأساسية ، وبالتالي فإن المعايير التالية لن ينعكس على تلك الحالات.
| نوع الموتر | إلى متغير Cuda Pytorch | مقارنة |
|---|---|---|
| Speedtorch (CUDA) | 0.0087 | 6.2x أبطأ من مكافئ Pytorch |
| speedtorch (binnedcpu) | 0.0154 | 3.1x أسرع من ما يعادل Pytorch |
| Pytorch (كودا) | 0.0014 | 6.2x أسرع من مكافئ Speedtorch |
| Pytorch (binnedcpu) | 0.0478 | 3.1x أبطأ من مكافئ Speedtorch |
| نوع الموتر | من متغير Cuda Pytorch | مقارنة |
|---|---|---|
| Speedtorch (CUDA) | 0.0035 | 9.7x أسرع من ما يعادل Pytorch |
| speedtorch (binnedcpu) | 0.0065 | 410x أسرع من ما يعادل Pytorch |
| Pytorch (كودا) | 0.0341 | 9.7x أبطأ من مكافئ Speedtorch |
| Pytorch (binnedcpu) | 2.6641 | 410x أبطأ من مكافئ Speedtorch |
| نوع الموتر | مجموع متغير Cuda Pytorch | مقارنة |
|---|---|---|
| Speedtorch (CUDA) | 0.0122 | 2.9x أسرع من ما يعادلها Pytorch |
| speedtorch (binnedcpu) | 0.0219 | 124x أسرع من ما يعادل Pytorch |
| Pytorch (كودا) | 0.0355 | 2.9x أبطأ من مكافئ Speedtorch |
| Pytorch (binnedcpu) | 2.7119 | 124x أبطأ من مكافئ Speedtorch |
تم حساب معايير مماثلة لنقلها إلى/من/من Pytorch CUDA محسنات. النتائج هي نفسها في الأساس ، وهنا دفتر الملاحظات المستخدم في معايير المُحسّن
https://colab.research.google.com/drive/1y2nehd8xj-ixfjkj2qwua_ujqjbhhj5
على الرغم من أن موترات Speedtorch أسرع بشكل عام من Pytorch ، فإن العيب هو موترات Speedtorch تستخدم المزيد من الذاكرة. ومع ذلك ، نظرًا لأن نقل البيانات يمكن أن يحدث بسرعة أكبر ، يمكنك استخدام SpeedTorch لزيادة عدد التضمين المدربين في بنيةك من خلال الاحتفاظ بمعلمات في كل من GPU و CPU.
هذا الجدول هو ملخص للقياس الذي تم في Google Colab. من تجربتي ، يبدو أن هناك بعض الاختلافات في قيم الذاكرة المبلغ عنها في كولاب ، +-0.30 جيجابايت ، لذلك ضع ذلك في الاعتبار أثناء مراجعة هذه الأرقام. القيم مخصصة لعقد مكونات 10،000،000 × 128 Float32.
| نوع الموتر | وحدة المعالجة المركزية (GB) | GPU (GB) |
|---|---|---|
| cupy binnedcpu | 9.93 | 0.06 |
| Pytorch binnedcpu | 6.59 | 0.32 |
| كودا كودا | 0.39 | 9.61 |
| Pytorch كودا | 1.82 | 5.09 |
على الرغم من أن وقت Pytorch to/for Pytorch GPU Tensor <-> Pytorch CUDA متغير ليس بالسرعة التي يعادلها ، إلا أن السرعة لا تزال قابلة للتطبيق. لذا ، إذا كانت الذاكرة لا تزال مصدر قلق ، فإن أفضل ما في كلتا النهج في العالم هو أن وحدة المعالجة المركزية لـ Speedtorch Cupy Tensors لتخزين المعلمات على وحدة المعالجة المركزية ، وموتورات GPU Pytorch الخاصة بـ Speedtorch لتخزين المعلمات على وحدة معالجة الرسومات.
هذا هو دفتر الملاحظات الذي استخدمته لقياس مقدار الذاكرة التي يتطلبها كل نوع متغير. https://colab.research.google.com/drive/1zky7pyupaidrnx2hdtbujwo8juy0xkue إذا كنت تستخدم هذا في كولاب ، فستحتاج إلى إعادة تشغيل Enviroment بعد كل إنشاء Tensor ، للحصول على مقياس للمتنزور التالي.
بالنسبة لنقل وحدة المعالجة المركزية <-> وحدة معالجة الرسومات ، فإنه يعتمد على مقدار البيانات التي يتم نقلها ، وعدد النوى لديك. بشكل عام ل 1-2 CPU CORES Speedtorch سيكون أسرع بكثير. ولكن مع ارتفاع عدد نوى وحدة المعالجة المركزية ، تصبح عمليات فهرسة وحدة المعالجة المركزية Pytorch <-> أكثر كفاءة. لمزيد من التفاصيل حول هذا ، يرجى الاطلاع على قسم "كيف يعمل" التالي. للحصول على طريقة سهلة لمعرفة ما إذا كنت تحصل على ميزة السرعة في نظامك ، يرجى تشغيل رمز القياس على نظامك ، ولكن تغيير مقدار البيانات لتعكس المبلغ الذي ستعمل معه في التطبيق الخاص بك.
بالنسبة لنقل GPU <-> GPU ، إذا كان استخدام تدوينات الفهرسة العادية في الفانيليا pytorch ، ستحصل جميع الأنظمة على زيادة السرعة لأن Speedtorch يتجاوز خطأ في عمليات فهرسة Pytorch. ولكن يمكن تجنب هذا الخطأ في حالة استخدام الإصدار الليلي ، أو فقط باستخدام مفاهيم الفهرسة المختلفة ، يرجى الاطلاع على قسم "كيفية عمله" لمزيد من التفاصيل.
تحديث 9-20-19: في البداية لم يكن لدي أي فكرة عن سبب هذا أسرع من استخدام موترات Pytorch ؛ لقد تعثرت على ميزة السرعة عن طريق الصدفة. لكن أحد مطوري Pytorch في منتدى Pytorch أشار إليه.
أما بالنسبة لعملية نقل وحدة المعالجة المركزية <-> وحدة معالجة الرسومات ، فذلك لأن Speedtorch يتجنب عملية فهرسة وحدة المعالجة المركزية عن طريق موترات وحدة المعالجة المركزية Masquarding كموتورات GPU. قد تكون عملية فهرس وحدة المعالجة المركزية بطيئة إذا عملت مع عدد قليل جدًا من مراكز وحدة المعالجة المركزية ، مثل 2 في Google Colab ، ولكن قد تكون أسرع إذا كان لديك العديد من النوى. يعتمد ذلك على مقدار البيانات التي تنقلها وعدد النوى التي لديك.
أما بالنسبة لنقل GPU <-> GPU بشكل أفضل ، فذلك لأن Speedtorch يتجنب وجود خطأ في عملية الفهرسة. يمكن أيضًا تجنب هذا الخطأ باستخدام التصميم الليلي ، أو استخدام index_select / index_copy_ بدلاً من تدوين a[idx] في 1.1 / 1.2.
لمزيد من التفاصيل من هذا ، يرجى الاطلاع على منشور Pytorch
https://discuss.pytorch.org/t/introducing-peedtorch-4x-peed-cpu-gpu-transfer 1110x-gpu-cpu-transfer/56147/2
عندما يقدم مهندس Pytorch تحليلًا مفصلاً حول كيفية قيام kernals الفهرسة بالفهرسة التي تؤدي إلى زيادة السرعة في بعض الحالات. ليس النقل نفسه هو الذي يزداد أسرع ، ولكن kernals الفهرسة التي يتم استخدامها.
أما بالنسبة لكيفية إدارة الذاكرة في أعمال Cupy ، فإنني توجه إلى هذين أسئلة Stackoverflow التي طرحتها ، حيث لم يقدم المستخدم الرائع روبرت كروفيلا تفسيرات مفصلة فحسب ، بل اكتشف أيضًا كيفية تخصيص ذاكرة مثبتة لكأس المصفوفات من خلال تطوير ذاكرته الخاصة لـ Cupy. هذا هو في الأساس التكنولوجيا الأساسية وراء Speedtorch.
https://stackoverflow.com/questions/57750125/cupy-outofmemoryerror-when-try-to-to-cupy-larger-dimension-npy-files-in-me
https://stackoverflow.com/questions/57752516/how-to-use-cuda-pinned-zero-copy-memory-for-a-memory-file
Speedtorch هو pip قابلة للتثبيت. تحتاج إلى تثبيت كأس واستيرادها قبل استيراد Speedtorch.
!pip install SpeedTorch
import cupy
import SpeedTorch
يوضح دفتر كولاب هذا كيفية تحميل البيانات إلى speedtorch باستخدام أداة البيانات الخاصة به ، وكيفية نقل هذه البيانات إلى/من متغير Pytorch CUDA.
https://colab.research.google.com/drive/185z5gi62azxh-emfrtjqxeifhobxxf
يرجى الاطلاع على دفتر Notebook SPEED لمعرفة ميزة السرعة المتمثلة في استخدام SpeedTorch.
بالنسبة للأشخاص الذين يحاولون أولاً معرفة كيفية استخدام Speedtorch ، أوصي باتباع هذا المثال ، نظرًا لأن Word2Vec هو واحد من الخوارزميات الأكثر شيوعًا في التعلم الآلي.
https://colab.research.google.com/drive/1apjr3onbgqwm3fbcbkmvwagxidxot
يوضح دفتر الملاحظات كيفية تدريب Word2Vec بالطريقة العادية ، ثم يوضح كيفية استخدام Speedtorch للتدريب على نفس البيانات ، باستخدام أحد الأمراض غير المُحسّنة عادةً للتدريب المتناثر. هذا ممكن لأنه نظرًا لأن جميع التضمينات الواردة في متغير التضمين لها تحديث أثناء كل خطوة ، يمكنك تعيين sparse=False أثناء التهيئة.
TL ؛ DR:
التدريب العادي : تحتوي متغيرات التضمين Pytorch على جميع التضمين. يحتوي Pytorch Optimizer على جميع أوزان المعلمة المقابلة لكل تضمين.
traing speedtorch : Pytorch inmbeddng متغيرات فقط تحتوي على مجموعة من التضمينات. يحتوي Pytorch Optimizer فقط على جميع أوزان المعلمة المقابلة لتلك الدفعة. تحتوي موترات sparSetorch على الباقي ، وتبادل التضمين/الأوزان مع متغير Pytorch في كل خطوة.
في خوارزميات التدريب المتفرقة مثل Word2Vec أو القفاز أو التصفية التعاونية العصبية ، يتم تدريب فقط جزء صغير من المعلمات الكلية (inmbeddngs) خلال كل خطوة. إذا لم يتمكن وحدة معالجة الرسومات الخاصة بك من التعامل مع جميع تضميناتك بحجم التضمين المطلوب ، فسيكون هناك خيار لاستضافة بعض المعلمات الخاصة بك على صفائف CPU Cupy Cupy ، ونقل تلك المعلمات إلى موترات النموذج الخاصة بك حسب الحاجة. سيكون القيام بذلك الأساسي في Pytorch بطيئًا للغاية ، خاصةً لأن نقل المعلمات بين متغير Pytorch المثبت على CUDA وموتر Pytorch CPU المثبت قد يستغرق 2.5-3 ثانية (على Google Colab). لحسن الحظ ، تستغرق هذه الخطوة فقط 0.02-0.03 ثانية مع Speedtorch!
يستخدم الحالة:
-2،829،853 تضمينات كتاب-
تم استخدام Speedtorch في تدريب 2،829،853 كتابًا لتوصية كتاب نادرة.
https://github.com/santosh-gupta/lit2vec2
https://devpost.com/software/lit2vec2
كان لكل كتاب تضمين بحجم 400 ، ولكن يمكن استخدام حجم التضمين 496 ، وكان حجم التضمين 400 بسبب حدود المساحة على محرك Google لتخزين التضمينات المدربة :(
ملاحظة: أنت بحاجة إلى إصدار دفتر كولاب الذي يحتوي على 25 جيجابايت من ذاكرة الوصول العشوائي ، بدلاً من 12 جيجابايت المعتاد. للحصول على هذا النوع من المثيلات ، تحتاج إلى تصادم مثيلك الحالي بسبب غامرة في ذاكرة الوصول العشوائي ، ثم ملاحظة في الزاوية اليسرى السفلية تسأل عما إذا كنت ترغب في الترقية. يمكنك القيام بذلك عن طريق صنع حلقة تستمر في مضاعفة حجم مصفوفة تعويم numpy.
https://colab.research.google.com/drive/1aqht-hetihxmet1wjqrorc3q9tfjqj19
فيما يلي ارتباط مباشرة بنفس النموذج والبيانات ، ولكن لا يستخدم Speedtorch
https://colab.research.google.com/drive/1idv1jbouzvpcfdsy40wirrphedoanti_
باستخدام طريقة التدريب الأرثوذكسية ، فإن أكبر حجم تضمين قادر على التعامل معه هو 255-260 ، أي أعلى من ذلك وسيحدث خطأ CUDA
RuntimeError: CUDA out of memory. Tried to allocate 2.74 GiB (GPU 0; 11.17 GiB total capacity; 8.22 GiB already allocated; 2.62 GiB free; 5.05 MiB cached)
-14،886،544 بحث أوراق البحث-
https://github.com/santosh-gupta/research2vec2
يمكن أن يسمح لي Speedtorch بتدريب 14،886،544 من تضمينات ورق بحث على حجم التضمين 188 ، من خلال السماح لتخزين تضميناتي المستهدفة على وحدة المعالجة المركزية ، مع الحفاظ على تضمينات السياق على وحدة معالجة الرسومات (تم استخدام SGD Optimizer ، لذلك لا توجد أوزان محسّنة).
فيما يلي رابط مباشر إلى دفتر الملاحظات.
https://colab.research.google.com/drive/1sakzsahoy6o_u1df_z15_qkr5ylni_gr
ملاحظة: أنت بحاجة إلى إصدار دفتر كولاب الذي يحتوي على 25 جيجابايت من ذاكرة الوصول العشوائي ، بدلاً من 12 جيجابايت المعتاد. للحصول على هذا النوع من المثيلات ، تحتاج إلى تصادم مثيلك الحالي بسبب غامرة في ذاكرة الوصول العشوائي ، ثم ملاحظة في الزاوية اليسرى السفلية تسأل عما إذا كنت ترغب في الترقية. يمكنك القيام بذلك عن طريق صنع حلقة تستمر في مضاعفة حجم مصفوفة تعويم numpy.
بدون Speedtorch ، يمكن استخدام حجم التضمين من 94-96 فقط على Google Colab Tesla K80 قبل RuntimeError: CUDA out of memory . فيما يلي نسخة من التدريب دون استخدام Speedtorch.
https://colab.research.google.com/drive/1jh7rugeajhdwdgnfwg3twm1zjytqu0kr
عند استخدام موترات GPU Cupy ، قم بتهيئها قبل أي موترات وحدة المعالجة المركزية المثبتة. وذلك لأن تهيئة موترات GPU Cupy يبدو أنها تستخدم كمية صلبة من ذاكرة الوصول العشوائي CPU. لذا ، إذا كنت محدودًا على ذاكرة الوصول العشوائي للوحدة المعالجة المركزية ، وكان لديك بالفعل موترات وحدة المعالجة المركزية المثبتة في الذاكرة ، فإن تهيئة موترات وحدة معالجة الرسومات الكأس قد تسبب تعطل.
إذا كنت قادرًا على وضع جميع المعلمات الخاصة بك في ذاكرة GPU الخاصة بك ، فاستخدم Pytorch النقي لأن هذا هو الخيار الأسرع للتدريب. ولكن إذا لم تتمكن من وضع جميع معلماتك في الذاكرة ، فقم بتقسيم المعلمات الخاصة بك (ضع في اعتبارك أن المُحسِّنات الخاصة بك لديها أيضًا أوزان) بين موترات CUDA Cuda الخاصة بـ Speedtorch ومتوسونات وحدة المعالجة المركزية المغطاة بـ Speedtorch ؛ هذا هو ثاني أسرع الخيارات. ولكن ، إذا كنت لا تزال غير قادر على وضع جميع المعلمات الخاصة بك في الذاكرة بهذه الطريقة ، فقم بتقسيم معلماتك بين موترات وحدة المعالجة المركزية CPU المغطاة بـ Speedtorch ، وموترات Pytorch CUDA من Speedtorch ؛ هذا أبطأ من كلا الخيارين ، ولكنه يستخدم ذاكرة GPU أقل. For the 3rd option, here are two notebooks which shows an example of this https://colab.research.google.com/drive/1AqhT-HetihXMET1wJQROrC3Q9tFJqJ19 , https://colab.research.google.com/drive/1saKzsaHoy6O_U1DF_z15_Qkr5YLNI_GR
بعد التدريب ، سيؤدي إنقاذ أي متغيرات CUDA إلى زيادة في استخدام الذاكرة ، وقد يتسبب في حدوث تعطل ، خاصة مع الكأس. إذا كنت على حدود الكبش. في هذه الحالة ، استخدم طريقة getNumpyVersion للحصول على إصدار numpy من الموتر الخاص بك ، ثم استخدم استخدام numpy.save أو hdpy/pytables لحفظ صفيف numpy الخاص بك. Numpy Save أكثر خفيفة الوزن.
إما فتح مشكلة ، أو الدردشة معي دليل على Gitter هنا https://gitter.im/speedtorch
إنني أبحث عن المزيد من الوظائف حول وحدة المعالجة المركزية السريعة -> نقل وحدة معالجة الرسومات. إذا كان لديك فكرة ، فيرجى نشر مشكلة github.
بالإضافة إلى ذلك ، فإن وحدة المعالجة المركزية CPU/PYTORCH GPU GPU CUPY ، تحتوي أيضًا على موترات CPU CPU مثبتة PYTORCH ، وموترات المعالجة المركزية CPU CUPY MEMMAP/CPU. لم أجد استخدامًا قويًا لهذه الأنواع من التوتر ، لكنها مشفرة بالكامل ومتاحة للاستخدام.
https://github.com/santosh-gupta/speedtorch/tree/master/speedtorch
أحد المجالات التي أود أن أنظر إليها هي ما إذا كانت هناك طريقة لتخفيض ذاكرة ذاكرة الوصول العشوائي باستخدام Memmaps Cupy. حتى الآن يستخدمون الكثير من الذاكرة مثل الإصدارات الحية.
ModelFactory ( model_variable , total_classes , embed_dimension , datatype = 'float32' , CPUPinn = False )ينشئ المحولات لمتغيرات النموذج باستخدام Cupy. تبديل المتغيرات من مجموعة التضمين الكاملة ومجموعة الدُفعات النموذجية الخاصة بك. كل متغير يحتاج إلى المحول الخاص به.
مثال:
uEmbed_switcher = SpeedTorch . ModelFactory ( skip_gram_modelSparse . u_embeddings , total_classes = 50000 , embed_dimension = 128 )الحجج:
model_variable : متغير محدد من النموذج الخاص بك ، تود إنشاء Switcher لـ.
total_classes : إجمالي كمية التضمينات المراد تدريبها.
embed_dimension : أبعاد التضمينات.
datatype (اختياري): نوع البيانات للمتغير. الافتراضي هو "Float32".
CPUPinn (اختياري): قم بتثبيت مجموعة التضمين الكاملة إلى وحدة المعالجة المركزية. قطع الغيار ذاكرة GPU ، ولكن نقل البيانات سيكون أبطأ. الافتراضي كاذب.
طُرق:
zerosInit() : تهيئة مجموعة كاملة من المحولات المتغيرة مع الأصفار:
uniformDistributionInit(low, high) : تهيئة مجموعة كاملة من المحولات المتغيرة مع توزيع موحد من low إلى high
normalDistributionInit(mean, stdDev) : تهيئة المجموعة الكاملة للتبديل المتغير مع توزيع عادي mean وانحراف معياري لـ stdDev
variableTransformer( batchSize, posPerBatch, negPerBatch = None ) : قم بإعداد مدخلات وهمية لاستخدامها في النموذج الأمامي الخاص بك. batchSize هو حجم الدُفعة الخاصة بك ، و posPerBatch هو عدد الأمثلة الإيجابية لكل دفعة. إذا كانت هناك حاجة إلى إدخال وهمية ثانية للأمثلة السلبية ، فيمكن ضبط negPerBatch (اختياري) على عدد الأمثلة السلبية ، وسيتم إرجاع اثنين من المدخلات الوهمية بدلاً من واحد.
beforeForwardPass(retrievedPosIndexes , retrievedNegIndexes = None) : تبديل التضمينات من مجموعة التضمين الكاملة إلى تضمينات النموذج الخاص بك. retrievedPosIndexes هي فهارس العينات الإيجابية التي سيتم استردادها. إذا تم استرداد العينات السلبية أيضًا ، فيمكن تمرير قيمة retrievedNegIndexes (اختيارية) أيضًا.
afterOptimizerStep( retrievedPosIndexes , retrievedNegIndexes = None) : مفاتيح التحديثات المحدثة من النموذج الخاص بك إلى مجموعة التضمين الكاملة. retrievedPosIndexes هي فهارس العينات الإيجابية التي تم استردادها. إذا تم استرداد العينات السلبية أيضًا ، فيمكن تمرير قيمة retrievedNegIndexes (اختيارية) أيضًا.
saveCupy(saveFileName) : حفظ الموتر إلى .npy ملف.
loadCupy(loadFileName) : تحميل الموتر من ملف .npy.
getNumpyVersion : الحصول على إصدار numpy من Tensor.
OptimizerFactory( given_optimizer, total_classes, embed_dimension, model, variable_name, dtype='float32' , CPUPinn = False)
ينشئ المحولات لمتغيرات المحسّن باستخدام Cupy. تبديل المتغيرات من مجموعة التضمين الكاملة ومجموعة الدفع المحسن. كل متغير يحتاج إلى المحول الخاص به.
مثال:
uAdagrad_switcher = SpeedTorch . OptimizerFactory ( given_optimizer , total_classes , embed_dimension , model , variable_name , dtype = 'float32' , CPUPinn = False )الحجج:
given_optimizer : تم تهيئة المحسن مع أوزان النموذج الخاصة بك. إذا كنت تستخدم لتدريبات التضمينات ، تذكر تعيين المعلمة sparse على False . في الوقت الحالي ، فإن المحسنات المدعومة هي Sparseadam و Adadelta و Adamax و Adamw و Adamw و ASGD و RMSPROP. RPROP محفوظ أيضًا ، ولكنه يحتاج إلى أول تمريرة للأمام ، loss.backward() ويرجع ذلك إلى مُحسّن RPROP الذي يحتاج إلى تدرجات من معلماته للتهيئة.
total_classes : إجمالي كمية التضمينات المراد تدريبها.
embed_dimension : أبعاد التضمينات.
model : مثيل النموذج الخاص بك.
variable_name : الاسم الدقيق للمتغير المحدد في النموذج الخاص بك.
dtype (اختياري): نوع بيانات المتغير الخاص بك. الافتراضي هو "Float32"
CPUPinn (اختياري): قم بتثبيت مجموعة الوزن المتغيرة المحسّنة الكاملة إلى وحدة المعالجة المركزية. قطع الغيار ذاكرة GPU ، ولكن نقل البيانات سيكون أبطأ. الافتراضي كاذب.
طُرق:
optInit : تهيئة المحول المتغير المحسّن.
beforeForwardPass(retrievedPosIndexes , retrievedNegIndexes = None) : Switches Optimizer Variable Outsions من مجموعة الأوزان الكاملة إلى موتر الوزن المحسن. retrievedPosIndexes هي فهارس العينات الإيجابية التي سيتم استردادها. إذا تم استرداد العينات السلبية أيضًا ، فيمكن تمرير قيمة retrievedNegIndexes (اختيارية) أيضًا.
afterOptimizerStep( retrievedPosIndexes , retrievedNegIndexes = None) : Switches Optimizer Variable Outsions من مُحسِّنك إلى مجموعة الأوزان الكاملة. retrievedPosIndexes هي فهارس العينات الإيجابية التي تم استردادها. إذا تم استرداد العينات السلبية أيضًا ، فيمكن تمرير قيمة retrievedNegIndexes (اختيارية) أيضًا.
ينشئ موترًا وظيفته الرئيسية هي نقل محتوياته إلى متغير Pytorch CUDA.
DataGadget( fileName, CPUPinn=False)
الحجج:
fileName : موقع ملف البيانات.
CPUPinn : (اختياري): قم بتثبيت بياناتك إلى وحدة المعالجة المركزية. الافتراضي كاذب.
طُرق:
getData(indexes) : استرداد البيانات بتنسيق جاهز للقبول بواسطة متغير Pytorch CUDA. indexes هي فهارس الموتر التي لاسترداد البيانات من.
insertData(dataObject, indexes) : أدخل البيانات من متغير Pytorch CUDA. dataObject هي بيانات الموتر المتغيرة Pytorch CUDA التي سيتم من خلالها إعادة تعريف البيانات ، indexes الموتر التي لاسترداد البيانات منها.
saveCupy(saveFileName) : حفظ الموتر إلى .npy ملف.
loadCupy(loadFileName) : تحميل موتر جديد من ملف .npy.
getNumpyVersion : الحصول على إصدار numpy من Tensor.
يرجى الاطلاع على دفتر الملاحظات حول كيفية استخدام أداة البيانات
https://colab.research.google.com/drive/185z5gi62azxh-emfrtjqxeifhobxxf
PytorchModelFactory ( model_variable , total_classes , embed_dimension , datatype = 'float32' , deviceType = 'cuda' , pinType = False )ينشئ المحولات لمتغيرات النموذج باستخدام موترات Pytorch. تبديل المتغيرات من مجموعة التضمين الكاملة ومجموعة الدُفعات النموذجية الخاصة بك. كل متغير يحتاج إلى المحول الخاص به.
مثال:
uEmbed_switcher = SpeedTorch . PytorchModelFactory ( skip_gram_modelSparse . u_embeddings , total_classes = 50000 , embed_dimension = 128 )الحجج:
model_variable : متغير محدد من النموذج الخاص بك ، تود إنشاء Switcher لـ.
total_classes : إجمالي كمية التضمينات المراد تدريبها.
embed_dimension : أبعاد التضمينات.
datatype (اختياري): نوع البيانات للمتغير. الافتراضي هو "Float32".
deviceType (اختياري): اضبط الجهاز إما على "CUDA" أو "وحدة المعالجة المركزية". الافتراضي هو "كودا"
pinType (اختياري): إذا تم تعيين الجهاز على "وحدة المعالجة المركزية" ، فيمكنك تحديد باستخدام الذاكرة المثبتة. الافتراضي هو "خطأ".
طُرق:
zerosInit() : تهيئة مجموعة كاملة من المحولات المتغيرة مع الأصفار:
uniformDistributionInit(low, high) : تهيئة مجموعة كاملة من المحولات المتغيرة مع توزيع موحد من low إلى high
normalDistributionInit(mean, stdDev) : تهيئة المجموعة الكاملة للتبديل المتغير مع توزيع عادي mean وانحراف معياري لـ stdDev
customInit(initFunction, *args) : استخدم أي Pytorch Entremizer لمجموعة المحولات الكاملة المتغيرة. تمرير التهيئة باستخدام initFunction والوسائط المقابلة باستخدام *args .
variableTransformer(batchSize, posPerBatch, negPerBatch = None ) : قم بإعداد مدخلات وهمية لاستخدامها في النموذج الأمامي الخاص بك. batchSize هو حجم الدُفعة الخاصة بك ، و posPerBatch هو عدد الأمثلة الإيجابية لكل دفعة. إذا كانت هناك حاجة إلى إدخال وهمية ثانية للأمثلة السلبية ، فيمكن ضبط negPerBatch (اختياري) على عدد الأمثلة السلبية ، وسيتم إرجاع اثنين من المدخلات الوهمية بدلاً من واحد.
beforeForwardPass(retrievedPosIndexes , retrievedNegIndexes = None) : تبديل التضمينات من مجموعة التضمين الكاملة إلى تضمينات النموذج الخاص بك. retrievedPosIndexes هي فهارس العينات الإيجابية التي سيتم استردادها. إذا تم استرداد العينات السلبية أيضًا ، فيمكن تمرير قيمة retrievedNegIndexes (اختيارية) أيضًا.
afterOptimizerStep(retrievedPosIndexes , retrievedNegIndexes = None) : مفاتيح التحديثات المحدثة من النموذج الخاص بك إلى مجموعة التضمين الكاملة. retrievedPosIndexes هي فهارس العينات الإيجابية التي تم استردادها. إذا تم استرداد العينات السلبية أيضًا ، فيمكن تمرير قيمة retrievedNegIndexes (اختيارية) أيضًا.
saveTorch(saveFileName) : حفظ Tensor للملف باستخدام Torch.save
loadTorch(loadFileName) : تحميل الموتر باستخدام torch.load
getNumpyVersion : الحصول على إصدار numpy من Tensor.
PytorchOptimizerFactory( given_optimizer, total_classes, embed_dimension, model, variable_name, dtype='float32', deviceType = 'cuda', pinType = False)
يقوم بإنشاء المحولات لمتغيرات المُحسّنة باستخدام موترات Pytorch. تبديل المتغيرات من مجموعة التضمين الكاملة ومجموعة الدفع المحسن. كل متغير يحتاج إلى المحول الخاص به.
مثال:
uAdagrad_switcher = SpeedTorch . PytorchOptimizerFactory ( given_optimizer , total_classes , embed_dimension , model , variable_name , dtype = 'float32' )الحجج:
given_optimizer : تم تهيئة المحسن مع أوزان النموذج الخاصة بك. إذا كنت تستخدم لتدريبات التضمينات ، تذكر تعيين المعلمة sparse على False . في الوقت الحالي ، فإن المحسنات المدعومة هي Sparseadam و Adadelta و Adamax و Adamw و Adamw و ASGD و RMSPROP. RPROP محفوظ أيضًا ، ولكنه يحتاج إلى أول تمريرة للأمام ، loss.backward() ويرجع ذلك إلى مُحسّن RPROP الذي يحتاج إلى تدرجات من معلماته للتهيئة.
total_classes : إجمالي كمية التضمينات المراد تدريبها.
embed_dimension : أبعاد التضمينات.
model : مثيل النموذج الخاص بك.
variable_name : الاسم الدقيق للمتغير المحدد في النموذج الخاص بك.
dtype (اختياري): نوع بيانات المتغير الخاص بك. الافتراضي هو "Float32"
deviceType (اختياري): اضبط الجهاز إما على "CUDA" أو "وحدة المعالجة المركزية". الافتراضي هو "كودا"
pinType (اختياري): إذا تم تعيين الجهاز على "وحدة المعالجة المركزية" ، فيمكنك تحديد باستخدام الذاكرة المثبتة. الافتراضي هو "خطأ".
طُرق:
optInit : تهيئة المحول المتغير المحسّن.
beforeForwardPass(retrievedPosIndexes , retrievedNegIndexes = None) : Switches Optimizer Variable Outsions من مجموعة الأوزان الكاملة إلى موتر الوزن المحسن. retrievedPosIndexes هي فهارس العينات الإيجابية التي سيتم استردادها. إذا تم استرداد العينات السلبية أيضًا ، فيمكن تمرير قيمة retrievedNegIndexes (اختيارية) أيضًا.
afterOptimizerStep( retrievedPosIndexes , retrievedNegIndexes = None) : Switches Optimizer Variable Outsions من مُحسِّنك إلى مجموعة الأوزان الكاملة. retrievedPosIndexes هي فهارس العينات الإيجابية التي تم استردادها. إذا تم استرداد العينات السلبية أيضًا ، فيمكن تمرير قيمة retrievedNegIndexes (اختيارية) أيضًا.
إذا كنت تستخدم Speedtorch في بحثك أو ترغب في الاستشهاد ، فيرجى الاستشهاد بـ:
misc {
العنوان = {speedtorch} ،
المؤلف = {Santosh Gupta} ،
howpublished = { url {github.com/santosh-gupta/speedtorch}} ،
السنة = {2019}
}