"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > بناء سحابة أولاما - توسيع نطاق الاستدلال المحلي على السحابة

بناء سحابة أولاما - توسيع نطاق الاستدلال المحلي على السحابة

تم النشر بتاريخ 2024-07-29
تصفح:460

Ollama هو في الأساس عبارة عن غلاف حول llama.cpp، مصمم لمهام الاستدلال المحلية. إنه ليس خيارك الأول عادةً إذا كنت تبحث عن أداء أو ميزات متطورة، ولكن له استخداماته، خاصة في البيئات التي تشكل فيها التبعيات الخارجية مصدر قلق.

تطوير الذكاء الاصطناعي المحلي

عند استخدام Ollama لتطوير الذكاء الاصطناعي المحلي، يكون الإعداد واضحًا ولكنه فعال. عادةً ما يستفيد المطورون من Ollama لتشغيل مهام الاستدلال مباشرةً على أجهزتهم المحلية. فيما يلي تصوير مرئي لإعداد تطوير محلي نموذجي باستخدام Ollama:

Typical Local Development with Ollama

يسمح هذا التكوين للمطورين بالاختبار والتكرار بسرعة دون تعقيدات اتصالات الخادم البعيد. إنها مثالية للنماذج الأولية ومراحل التطوير حيث يكون التحول السريع أمرًا بالغ الأهمية.

من المحلية إلى السحابية

يتضمن الانتقال من الإعداد المحلي إلى بيئة سحابية قابلة للتطوير التطور من إعداد بسيط 1:1 (طلب مستخدم واحد إلى مضيف استدلال واحد) إلى تكوين أكثر تعقيدًا من متعدد إلى متعدد (طلبات مستخدمين متعددة إلى مضيفي استدلال متعددين) . يعد هذا التحول ضروريًا للحفاظ على الكفاءة والاستجابة مع زيادة الطلب.

إليك كيف يبدو هذا التوسع عند الانتقال من التطوير المحلي إلى الإنتاج:

View of Typical m:n Scaling

يمكن أن يؤدي اعتماد نهج مباشر خلال هذا التحول إلى زيادة تعقيد التطبيقات بشكل كبير، خاصة وأن الجلسات تحتاج إلى الحفاظ على الاتساق عبر الحالات المختلفة. قد تنشأ تأخيرات وأوجه قصور في الكفاءة إذا لم يتم توجيه الطلبات على النحو الأمثل إلى أفضل مضيف استدلال متاح.

علاوة على ذلك، فإن الطبيعة المعقدة للتطبيقات الموزعة تجعل من الصعب اختبارها محليًا، مما قد يؤدي إلى إبطاء عملية التطوير وزيادة خطر الفشل في بيئات الإنتاج.

بدون خادم

تلخص الحوسبة بدون خادم إدارة الخادم وتفاصيل البنية التحتية، مما يسمح للمطورين بالتركيز فقط على التعليمات البرمجية ومنطق الأعمال. ومن خلال فصل معالجة الطلبات وصيانة الاتساق عن التطبيق، تعمل البنية بدون خادم على تبسيط عملية التوسع.

يسمح هذا النهج للتطبيق بمواصلة التركيز على تقديم القيمة، وحل العديد من تحديات التوسع الشائعة دون إثقال كاهل المطورين بتعقيدات البنية التحتية.

WebAssembly

يعالج WebAssembly (Wasm) التحدي المتمثل في إدارة التبعية من خلال تمكين تجميع التطبيقات في وحدات قائمة بذاتها. وهذا يجعل من السهل تنسيق التطبيقات واختبارها محليًا وفي السحابة، مما يضمن الاتساق عبر البيئات المختلفة.

تاو

tau

Tau هو إطار عمل لبناء منصات حوسبة سحابية منخفضة الصيانة وقابلة للتطوير بشكل كبير. إنها تتفوق في البساطة وقابلية التوسع. يجعل Tau النشر سهلاً ويدعم تشغيل سحابة محلية للتطوير، مما يسمح بإجراء اختبار شامل (E2E) لكل من البنية التحتية السحابية والتطبيقات التي تعمل عليها.

هذا النهج، الذي أشار إليه توبايت باسم "الترميز المحلي يساوي الإنتاج العالمي"، يضمن أن ما ينجح محليًا سيعمل عالميًا، مما يسهل بشكل كبير عمليات التطوير والنشر.

دمج Ollama في Tau مع نظام Orbit Plugin

يعمل نظام المكونات الإضافية الخاص بـ Tau، والمعروف باسم Orbit، على تبسيط عملية تحويل الخدمات إلى مكونات يمكن التحكم فيها بشكل كبير عن طريق تجميعها في وحدات مضيف WebAssembly. يسمح هذا الأسلوب لـ Tau بتولي مهام التنسيق، وتبسيط عملية النشر والإدارة.

تصدير الوظائف في أولاما

لإتاحة الوصول إلى وظائف Ollama ضمن نظام Tau البيئي، نستخدم نظام Orbit لتصدير قدرات Ollama كنقاط نهاية قابلة للاستدعاء. إليك كيفية تصدير نقطة النهاية في Go:

func (s *ollama) W_pull(ctx context.Context, module satellite.Module, modelNamePtr uint32, modelNameSize uint32, pullIdptr uint32) Error {
    model, err := module.ReadString(modelNamePtr, modelNameSize)
    if err != nil {
        return ErrorReadMemory
    }

    id, updateFunc := s.getPullId(model)

    if updateFunc != nil {
        go func() {
            err = server.PullModel(s.ctx, model, &server.RegistryOptions{}, updateFunc)
            s.pullLock.Lock()
            defer s.pullLock.Unlock()
            s.pulls[id].err = err
        }()
    }

    module.WriteUint64(pullIdptr, id)

    return ErrorNone
}

للحصول على مثال مباشر لتصدير الوظائف، يمكنك الرجوع إلى مثال hello_world.

بمجرد تحديد هذه الوظائف، يتم استدعاؤها الآن عبر القمر الصناعي. التصدير، يتيح التكامل السلس لـ Ollama في بيئة Tau:

func main() {
    server := new(context.TODO(), "/tmp/ollama-wasm")
    server.init()
    satellite.Export("ollama", server)
}

اختبارات الكتابة للبرنامج المساعد أولاما

تم اختبار البرنامج المساعد بطريقة مبسطة ومباشرة. إليك كيفية كتابة اختبار دالة بدون خادم في Go:

//export pull
func pull() {
    var id uint64
    err := Pull("gemma:2b-instruct", &id)
    if err != 0 {
        panic("failed to call pull")
    }
}

باستخدام مجموعة اختبار Tau وأدوات Go builder، يمكنك إنشاء المكون الإضافي الخاص بك ونشره في بيئة اختبار وتنفيذ الوظائف بدون خادم للتحقق من الوظيفة:

func TestPull(t *testing.T) {
    ctx := context.Background()

    // Create a testing suite to test the plugin
    ts, err := suite.New(ctx)
    assert.NilError(t, err)

    // Use a Go builder to build plugins and wasm
    gob := builder.New()

    // Build the plugin from the directory
    wd, _ := os.Getwd()
    pluginPath, err := gob.Plugin(path.Join(wd, "."), "ollama")
    assert.NilError(t, err)

    // Attach plugin to the testing suite
    err = ts.AttachPluginFromPath(pluginPath)
    assert.NilError(t, err)

    // Build a wasm file from serverless function
    wasmPath, err := gob.Wasm(ctx, path.Join(wd, "fixtures", "pull.go"), path.Join(wd, "fixtures", "common.go"))
    assert.NilError(t, err)

    // Load the wasm module and call the function
    module, err := ts.WasmModule(wasmPath)
    assert.NilError(t, err)

    // Call the "pull" function from our wasm module
    _, err = module.Call(ctx, "pull")
    assert.NilError(t, err)
}

شفرة

يمكنك العثور على الكود الكامل هنا https://github.com/ollama-cloud/ollama-as-wasm-plugin/tree/main/tau

ماذا بعد؟

يمكنك الآن إنشاء تطبيقات LLM بسهولة. فيما يلي الخطوات للبدء:

  • ابدأ محليًا باستخدام الحلم: قم بإعداد بيئتك المحلية لتطوير تطبيقك واختباره.
  • إنشاء مشروع: ابدأ مشروعًا جديدًا مع Tau لتسخير إمكاناته الكاملة.
  • إنشاء سحابة الإنتاج الخاصة بك: انشر مشروعك في بيئة سحابية للإنتاج.
  • أسقط البرنامج المساعد الثنائي في المجلد /tb/plugins.
  • استيراد مشروعك إلى مرحلة الإنتاج
  • تباهى!
بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/samyfodil/building-ollama-cloud-scaling-local-inference-to-the-cloud-2i1a?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3