النقاط البارزة • نظرة عامة • التثبيت • البدء • المركز • الوثائق • البرنامج التعليمي • المساهمة • ملاحظات الإصدار • المدونة
GNES [ jee-nes ] هو بحث عصبي مرن عام ، وهو نظام بحث دلالي سحابي أصلي يعتمد على شبكة عصبية عميقة.
يتيح نظام GNES فهرسًا واسع النطاق والبحث الدلالي عن نموذج المحتوى من نص إلى نص ، ومن صورة إلى صورة ، ومن فيديو إلى فيديو ، وأي شكل من أشكال المحتوى.
؟ لمعرفة المزيد حول المبادئ الأساسية لـ GNES، اقرأ منشور المدونة هذا
☁️سحابة أصلية ومرنة | ؟سهل الاستخدام | ؟مثال رائع من الفن |
---|---|---|
GNES هي خدمة متكاملة ! يتم تشغيل كل من التشفير والمفهرس والمعالج المسبق وجهاز التوجيه في حاويات خاصة بهم. إنهم يتواصلون عبر واجهات برمجة التطبيقات ذات الإصدارات ويتعاونون تحت تنسيق Docker Swarm/Kubernetes وما إلى ذلك. كما أن التوسع وموازنة التحميل والاسترداد الآلي، أصبحت جاهزة للاستخدام في GNES. | كم من الوقت سيستغرق نشر التغيير الذي يتضمن فقط تبديل الطبقة في VGG؟ في GNES، يعد هذا مجرد تغيير سطر واحد في ملف YAML. نقوم بتجريد منطق التشفير والفهرسة إلى تكوين YAML، بحيث يمكنك تغيير أو تكديس برامج التشفير والمفهرسات دون لمس قاعدة التعليمات البرمجية. | من خلال الاستفادة من مجتمعات AI/ML/NLP/CV سريعة التطور، نتعلم من أفضل نماذج التعلم العميق ونقوم بتوصيلها إلى GNES، مع التأكد من استمتاعك دائمًا بالأداء المتطور. |
؟عام وعالمي | ؟نموذج كمكون إضافي | ؟أفضل الممارسات |
هل تبحث عن نصوص أو صور أو حتى مقاطع فيديو قصيرة؟ هل تستخدم Python/C/Java/Go/HTTP كعميل؟ لا يهم نوع المحتوى الذي لديك أو اللغة التي تستخدمها، يمكن لـ GNES التعامل معها جميعًا. | عندما لا تلبي النماذج المدمجة متطلباتك، ما عليك سوى إنشاء النموذج الخاص بك باستخدام GNES Hub. قم بتعبئة النموذج الخاص بك كحاوية إرساء واستخدمه كمكون إضافي. | نحن نحب أن نتعلم أفضل الممارسات من المجتمع، مما يساعد GNES الخاص بنا على تحقيق المستوى التالي من التوافر والمرونة والأداء والمتانة. إذا كان لديك أي أفكار أو اقتراحات، فلا تتردد في المساهمة. |
يقوم GNES Hub بشحن نماذج AI/ML كحاويات Docker واستخدام حاويات Docker كمكونات إضافية. إنه يوفر طريقة نظيفة ومستدامة لنقل الخوارزميات الخارجية (مع التبعيات) إلى إطار عمل GNES. تتم استضافة GNES Hub على Docker Hub. |
هناك طريقتان للحصول على GNES، إما كصورة Docker أو كحزمة PyPi. بالنسبة لمستخدمي السحابة، نوصي بشدة باستخدام GNES عبر Docker .
docker run gnes/gnes:latest-alpine
يقوم هذا الأمر بتنزيل أحدث صورة من GNES (استنادًا إلى Alpine Linux) وتشغيلها في حاوية. عند تشغيل الحاوية، تقوم بطباعة رسالة إعلامية وتخرج.
إلى جانب صورة alpine
المُحسّنة للمساحة، نوفر أيضًا صورًا مستندة إلى Buster (Debian 10.0) وUbuntu 18.04 وUbuntu 16.04. يلخص الجدول أدناه جميع علامات GNES المتاحة. يمكن للمرء ملء {ver}
latest
أو stable
أو v0..xx
. latest
يشير إلى أحدث نسخة رئيسية لهذا المستودع، والتي قد لا تكون مستقرة. ننصحك باستخدام إصدار رسمي عن طريق تغيير الإصدار latest
إلى رقم إصدار، على سبيل المثال v0.0.24
، أو ببساطة استخدام stable
للإصدار الأخير، على سبيل المثال gnes:stable-ubuntu
علامة | الحجم والطبقات | وصف |
---|---|---|
{ver}-alpine | على أساس جبال الألب لينكس. ولا توجد مكتبات للتعلم العميق؛ خفيف الوزن للغاية وقابل للحمل، ويتيح التوسع السريع حتى على الأجهزة المتطورة. | |
{ver}-buster | على أساس دبيان 10.0؛ ولا توجد مكتبات للتعلم العميق؛ موصى به لبناء أو توسيع صورة GNES-Hub. | |
{ver}-ubuntu18 | على أساس أوبونتو 18.04؛ لا توجد مكتبات للتعلم العميق. | |
{ver}-full | على أساس أوبونتو 16.04؛ python-3.6.8، cuda-10.0، tf1.14، pytorch1.1، faiss، نماذج متعددة مُدربة مسبقًا؛ ثقيلة ولكنها قائمة بذاتها ومفيدة في اختبار GNES من البداية إلى النهاية. |
️ منذ 2019/10/21، توقفنا عن استضافة المرآة العامة Tencent Cloud. لا تزال صور Docker القديمة موجودة، ولكن لن تكون هناك صور جديدة متاحة على Tencent Cloud بعد الآن.
نحن نقدم أيضًا حزم Github ذات المرآة العامة. اختر المرآة التي تخدمك جيدًا.
docker login --username=xxx docker.pkg.github.com/gnes-ai/gnes # login to github package so that we can pull from it
docker run docker.pkg.github.com/gnes-ai/gnes/gnes:latest-alpine
يوضح الجدول أدناه حالة مسار البناء.
التسجيل | حالة البناء |
---|---|
مركز عامل الميناءgnes/gnes:[tag] | |
حزمة جيثبdocker.pkg.github.com/gnes-ai/gnes/gnes:[tag] |
pip
يمكنك أيضًا تثبيت GNES كحزمة Python3 عبر:
pip install gnes
لاحظ أن هذا سيؤدي فقط إلى تثبيت إصدار "مجرد" من GNES، ويتكون من الحد الأدنى من التبعيات لتشغيل GNES. لن يتم تثبيت أي نماذج مدربة مسبقًا من طرف ثالث، وسيتم تثبيت حزم التعلم العميق/ البرمجة اللغوية العصبية/ السيرة الذاتية. نحن نجعل هذا الإعداد هو سلوك التثبيت الافتراضي، حيث أن النموذج الذي يهتم به مهندسو البرمجة اللغوية العصبية قد لا يكون مهتمًا بمهندسي السيرة الذاتية. في GNES، تعمل النماذج كمكونات إضافية لـ Docker.
؟ لا تعد Tensorflow وPytorch وtorchvision جزءًا من تثبيت GNES. اعتمادًا على الطراز الخاص بك، قد يتعين عليك تثبيتها مسبقًا.
على الرغم من أنه ليس من المستحسن، يمكنك تثبيت GNES مع التبعيات الكاملة عبر:
pip install gnes[all]
تثبيت النقطة gnes[بيرت] | خادم خدمة بيرت>=1.8.6، عميل خدمة بيرت>=1.8.6 |
تثبيت النقطة gnes[ذوق] | الذوق> = 0.4.1 |
نقطة تثبيت gnes[إزعاج] | إزعاج==1.15.2 |
تثبيت النقطة gnes[الصينية] | jieba |
تثبيت النقطة gnes[رؤية] | opencv-python>=4.0.0, imagehash>=4.0 |
تثبيت النقطة gnes[leveldb] | رقائق> = 1.0.5 |
تثبيت النقطة gnes[اختبار] | بيلينت، ملف تعريف الذاكرة> = 0.55.0، بسوتيل> = 5.6.1، غبوتيل> = 1.4.0 |
نقطة تثبيت gnes [المحولات] | محولات الشعلة |
تثبيت النقطة gnes[onnx] | com.onnxruntime |
تثبيت النقطة gnes[الصوت] | ليبروسا>=0.7.0 |
تثبيت النقطة gnes[scipy] | scipy |
تثبيت النقطة gnes[nlp] | خادم bert-serving>=1.8.6، محولات pytorch، الذوق>=0.4.1، bert-serving-client>=1.8.6 |
تثبيت النقطة gnes[cn_nlp] | محولات pytorch، bert-serving-client>=1.8.6، bert-serving-server>=1.8.6، jieba، flair>=0.4.1 |
تثبيت النقطة gnes[الكل] | pylint، psutil>=5.6.1، محولات pytorch، إزعاج==1.15.2، bert-serving-client>=1.8.6، gputil>=1.4.0، bert-serving-server>=1.8.6، imagehash >=4.0، وقت التشغيل onnxruntime، ملف تعريف الذاكرة >=0.55.0، جيبا، الذوق>=0.4.1، librosa>=0.7.0، scipy، plyvel>=1.0.5، opencv-python>=4.0.0 |
إحدى الطرق الجيدة لاختيار التبعيات هي اتباع المثال في GNES Hub وبناء صورة GNES الخاصة بك.
في كلتا الحالتين، إذا انتهى بك الأمر إلى قراءة الرسالة التالية بعد تشغيل $ gnes
أو $ docker run gnes/gnes
، فأنت جاهز للبدء!
قبل أن نبدأ، اسمحوا لي أولاً أن أقدم مفهومين مهمين في GNES: الخدمة المصغرة وسير العمل .
بالنسبة لمهندسي التعلم الآلي وعلماء البيانات الذين ليسوا على دراية بمفهوم الخدمة السحابية الأصلية والخدمات المصغرة ، يمكن للمرء أن يتصور الخدمة المصغرة كتطبيق على هاتفك الذكي. يعمل كل تطبيق بشكل مستقل، وقد يتعاون التطبيق مع تطبيقات أخرى لإنجاز مهمة ما. في GNES، لدينا أربعة تطبيقات أساسية، والمعروفة أيضًا باسم. الخدمات المصغرة وهي:
في GNES، قمنا بتنفيذ العشرات من المعالجات المسبقة والمشفرات والمفهرسات لمعالجة أشكال المحتوى المختلفة، مثل الصورة والنص والفيديو. ومن السهل جدًا أيضًا توصيل التنفيذ الخاص بك، وهو ما سنرى مثالاً عليه في التكملة.
والآن بعد أن أصبح لدينا مجموعة من التطبيقات، ماذا نتوقع منهم أن يفعلوا؟ يحتوي نظام البحث النموذجي على مهمتين أساسيتين: الفهرس والاستعلام . يقوم الفهرس بتخزين المستندات، بينما يقوم الاستعلام بالبحث في المستندات. في نظام البحث العصبي، قد يواجه المرء مهمة أخرى: التدريب ، حيث يقوم المرء بضبط جهاز التشفير/المعالج المسبق وفقًا لتوزيع البيانات من أجل تحقيق صلة أفضل بالبحث.
تتوافق هذه المهام الثلاث مع ثلاث مسارات عمل مختلفة في GNES.
منذ
v0.0.46
أصبح GNES Flow هو الواجهة الرئيسية لـ GNES. يوفر GNES Flow طريقة لغة بايثونية وبديهية لتنفيذ سير العمل ، مما يتيح للمستخدمين تشغيل أو تصحيح أخطاء GNES على جهاز محلي. افتراضيًا، يقوم GNES Flow بتنسيق جميع الخدمات الصغيرة باستخدام واجهة خلفية متعددة الخيوط أو متعددة العمليات، ويمكن أيضًا تصديره إلى تكوين Docker Swarm/Kubernetes YAML، مما يسمح بتسليم GNES إلى السحابة.
؟ يمكن العثور على المثال الكامل ودفتر Jupyter Notebook المقابل هنا.
في هذا المثال، سوف نستخدم واجهة برمجة تطبيقات gnes.flow
الجديدة (مطلوب gnes >= 0.0.46
) لإنشاء نظام بحث عن صور الألعاب لفهرسة الزهور واسترجاعها استنادًا إلى أوجه التشابه بينها.
دعونا أولاً نحدد سير عمل الفهرسة من خلال:
from gnes . flow import Flow
flow = ( Flow ( check_version = False )
. add_preprocessor ( name = 'prep' , yaml_path = 'yaml/prep.yml' )
. add_encoder ( yaml_path = 'yaml/incep.yml' )
. add_indexer ( name = 'vec_idx' , yaml_path = 'yaml/vec.yml' )
. add_indexer ( name = 'doc_idx' , yaml_path = 'yaml/doc.yml' , recv_from = 'prep' )
. add_router ( name = 'sync' , yaml_path = 'BaseReduceRouter' , num_part = 2 , recv_from = [ 'vec_idx' , 'doc_idx' ]))
هنا، نستخدم نموذج inceptionV4 المُدرب مسبقًا كمشفر ومفهرسات مدمجة لتخزين المتجهات والمستندات. يجب أن يكون التدفق واضحًا تمامًا، وإذا لم يكن الأمر كذلك، فيمكنك دائمًا تحويله إلى صورة SVG ورؤية تصوره:
flow . build ( backend = None ). to_url ()
لفهرسة بيانات الزهور الخاصة بنا، نحتاج إلى مُكرِّر يُنشئ سلاسل bytes
ويغذي سلاسل bytes
تلك في التدفق المحدد.
def read_flowers ( sample_rate = 1.0 ):
with tarfile . open ( '17flowers.tgz' ) as fp :
for m in fp . getmembers ():
if m . name . endswith ( '.jpg' ) and random . random () <= sample_rate :
yield fp . extractfile ( m ). read ()
يمكننا الآن إجراء الفهرسة عبر الواجهة الخلفية متعددة العمليات:
with flow ( backend = 'process' ) as fl :
fl . index ( bytes_gen = read_flowers (), batch_size = 64 )
سيستغرق الأمر بضع دقائق حسب جهازك.
نحن ببساطة نختبر 20 صورة من صور الزهور كاستفسارات ونبحث عن أفضل 10 صور مشابهة لها:
num_q = 20
topk = 10
sample_rate = 0.05
# do the query
results = []
with flow . build ( backend = 'process' ) as fl :
for q , r in fl . query ( bytes_gen = read_flowers ( sample_rate )):
q_img = q . search . query . raw_bytes
r_imgs = [ k . doc . raw_bytes for k in r . search . topk_results ]
r_scores = [ k . score . value for k in r . search . topk_results ]
results . append (( q_img , r_imgs , r_scores ))
if len ( results ) > num_q :
break
هذه هي النتيجة، حيث توجد الاستعلامات في الصف الأول.
يمكن للمرء تحويل كائن Flow
إلى ملف إنشاء Docker Swarm/Kubernetes YAML بسهولة شديدة عبر:
flow . build ( backend = None ). to_swarm_yaml ()
version : ' 3.4 '
services :
Frontend0 :
image : gnes/gnes:latest-alpine
command : frontend --port_in 56086 --port_out 52674 --port_ctrl 49225 --check_version
False --ctrl_with_ipc True
prep :
image : gnes/gnes:latest-alpine
command : preprocess --port_in 52674 --port_out 65461 --host_in Frontend0 --socket_in
PULL_CONNECT --socket_out PUB_BIND --port_ctrl 49281 --check_version False --ctrl_with_ipc
True --yaml_path yaml/prep.yml
Encoder0 :
image : gnes/gnes:latest-alpine
command : encode --port_in 65461 --port_out 50488 --host_in prep --socket_in SUB_CONNECT
--port_ctrl 62298 --check_version False --ctrl_with_ipc True --yaml_path yaml/incep.yml
vec_idx :
image : gnes/gnes:latest-alpine
command : index --port_in 50488 --port_out 57791 --host_in Encoder0 --host_out
sync --socket_in PULL_CONNECT --socket_out PUSH_CONNECT --port_ctrl 58367 --check_version
False --ctrl_with_ipc True --yaml_path yaml/vec.yml
doc_idx :
image : gnes/gnes:latest-alpine
command : index --port_in 65461 --port_out 57791 --host_in prep --host_out sync
--socket_in SUB_CONNECT --socket_out PUSH_CONNECT --port_ctrl 50333 --check_version
False --ctrl_with_ipc True --yaml_path yaml/doc.yml
sync :
image : gnes/gnes:latest-alpine
command : route --port_in 57791 --port_out 56086 --host_out Frontend0 --socket_out
PUSH_CONNECT --port_ctrl 51285 --check_version False --ctrl_with_ipc True --yaml_path
BaseReduceRouter --num_part 2
لنشره، ما عليك سوى نسخ تكوين YAML الذي تم إنشاؤه إلى ملف مثل my-gnes.yml
، ثم القيام بذلك
docker stack deploy --compose-file my-gnes.yml gnes-531
في هذا المثال، سنقوم ببناء محرك بحث للقصيدة الدلالية باستخدام GNES. على عكس مثال البحث عن الزهور السابق، نقوم هنا بتشغيل كل خدمة كحاوية Docker معزولة ثم نقوم بتنسيقها عبر Docker Swarm. إنه يمثل سيناريو شائعًا في إعدادات السحابة. سوف تتعلم كيفية استخدام صور GNES القوية والمخصصة من مركز GNES.
؟ يرجى الخروج من هذا المستودع للحصول على التفاصيل واتباع التعليمات لإعادة الإنتاج.
دعونا نلخص ما تعلمناه.
تتم استضافة الوثائق الرسمية لـ GNES على doc.gnes.ai. يتم إنشاؤه وتحديثه وأرشفته تلقائيًا عند كل إصدار جديد.
؟ البرنامج التعليمي لا يزال قيد الإنشاء. ابقوا متابعين! وفي الوقت نفسه، نرحب بكم ترحيبًا حارًا للمساهمة بتجربتكم التعليمية / دراسة الحالة الخاصة بكم مع GNES!
PyTorch-Transformers
إلى GNESbert-as-service
لقد قمنا بإعداد هذا المستودع لتتبع زمن وصول الشبكة عبر إصدارات GNES المختلفة. كجزء من خط أنابيب CICD، يتم تحديث هذا الريبو تلقائيًا عند تحديث GNES الرئيسي أو إصدار إصدار GNES جديد.
❤️البداية دائماً هي الأصعب. لكن لا تخف، حتى لو وجدت خطأ مطبعي أو سلسلة مستندات مفقودة أو اختبار وحدة، يمكنك ببساطة تصحيحها عن طريق الالتزام بـ GNES. فيما يلي الخطوات:
fix-gnes-typo-1
fix(readme): improve the readability and move sections
fix(readme): improve the readability and move sections
أحسنت! بمجرد دمج العلاقات العامة، إليك ما حدث بعد ذلك:
-latest
تلقائيًا خلال ساعة. يمكنك التحقق من حالة المبنى هنا-stable
وفقًا لذلك.يمكن العثور على مزيد من التفاصيل في إرشادات المساهمين.
إذا كنت تستخدم GNES في ورقة أكاديمية، فنحن نرحب بك كثيرًا لتقديم اقتباس. فيما يلي طريقتان للاستشهاد بـ GNES:
footnote{https://github.com/gnes-ai/gnes}
@misc{tencent2019GNES,
title={GNES: Generic Neural Elastic Search},
author={Xiao, Han and Yan, Jianfeng and Wang, Feng and Fu, Jie and Liu, Kai},
howpublished={ url {https://github.com/gnes-ai}},
year={2019}
}
إذا قمت بتنزيل نسخة من الكود الثنائي أو المصدر لـ GNES، فيرجى ملاحظة أن الكود الثنائي والمصدر لـ GNES مرخصان بموجب ترخيص Apache، الإصدار 2.0.
يسر Tencent أن تدعم مجتمع المصادر المفتوحة من خلال إتاحة GNES.