كيف تبدأ مع ميلفوس
كيف تبدأ مع ميلفوس
آخر تحديث يناير 2025
تستلزم التطورات في نماذج اللغات الكبيرة(LLMs) وتزايد حجم البيانات وجود بنية تحتية مرنة وقابلة للتطوير لتخزين كميات هائلة من المعلومات، مثل قاعدة البيانات. ومع ذلك، فإن قواعد البيانات التقليدية مصممة لتخزين البيانات المجدولة والمنظمة، في حين أن المعلومات المفيدة عادةً للاستفادة من قوة نماذج اللغات الكبيرة وخوارزميات استرجاع المعلومات المتطورة هي معلومات غير منظمة، مثل النصوص أو الصور أو مقاطع الفيديو أو الصوت.
قواعد البيانات المتجهة هي أنظمة قواعد بيانات مصممة خصيصًا للبيانات غير المنظمة. لا يمكننا فقط تخزين كميات هائلة من البيانات غير المهيكلة باستخدام قواعد البيانات المتجهة فحسب، بل يمكننا أيضًا إجراء عمليات بحث متجهة باستخدامها. تحتوي قواعد البيانات المتجهة على طرق فهرسة متقدمة مثل فهرس الملفات المقلوب (IVFFlat) أو العالم الصغير المتجهي الهرمي القابل للتنقل(HNSW) لإجراء عمليات بحث واسترجاع معلومات سريعة وفعالة عن المتجهات.
Milvus هي قاعدة بيانات متجهات مفتوحة المصدر يمكننا استخدامها للاستفادة من جميع الميزات المفيدة التي يمكن أن تقدمها قاعدة بيانات المتجهات. فيما يلي ما سنتناوله في هذا المنشور:
ما هو ميلفوس؟
Milvus عبارة عن قاعدة بيانات متجهة مفتوحة المصدر تمكننا من تخزين كميات هائلة من البيانات غير المنظمة وإجراء عمليات بحث متجهة سريعة وفعالة عليها. تُعد Milvus مفيدة للغاية للعديد من تطبيقات GenAI الشائعة، مثل أنظمة التوصيات، وروبوتات الدردشة المخصصة، واكتشاف الشذوذ، والبحث عن الصور، ومعالجة اللغة الطبيعية، والجيل المعزز للاسترجاع(RAG).
هناك العديد من المزايا التي يمكنك الحصول عليها باستخدام Milvus كقاعدة بيانات متجهة:
يوفر Milvus خيارات نشر متعددة يمكنك الاختيار من بينها اعتمادًا على حالة استخدامك وحجم التطبيقات التي تريد إنشاءها.
يدعم Milvus مجموعة متنوعة من طرق الفهرسة لتلبية مختلف احتياجات البيانات والأداء، بما في ذلك الخيارات داخل الذاكرة مثل FLAT وIVFFlat وHNSW وSCANN، والمتغيرات الكمية لكفاءة الذاكرة، وDANN على القرص لمجموعات البيانات الكبيرة، والفهارس المحسّنة لوحدة معالجة الرسومات مثل GPU_CAGRA وGPU_IVF_FLAT وGPU_IVF_PQ لعمليات البحث المتسارعة والفعالة من حيث الذاكرة.
كما يوفر Milvus أيضًا بحثًا هجينًا، حيث يمكننا استخدام مزيج من التضمينات الكثيفة والتضمينات المتفرقة وتصفية البيانات الوصفية أثناء عمليات البحث المتجه، مما يؤدي إلى نتائج استرجاع أكثر دقة. بالإضافة إلى ذلك، يدعم Milvus 2.5 الآن بحثًا هجينًا عن النص الكامل والبحث المتجه، مما يجعل عملية الاسترجاع أكثر دقة.
يمكن استخدام Milvus بشكل كامل على السحابة عبر Zilliz Cloud، حيث يمكنك تحسين تكاليفه التشغيلية وسرعة البحث المتجه بفضل أربع ميزات متقدمة: المجموعات المنطقية، وتصنيف البيانات المتدفقة والتاريخية، والتخزين المتدرج، والتوسيع التلقائي، والفصل بين الإيجارات المتعددة.
عند استخدام Milvus كقاعدة بيانات متجهة، يمكنك اختيار ثلاثة خيارات نشر مختلفة، لكل منها نقاط قوته وفوائده. سنتحدث عن كل منها في القسم التالي.
خيارات نشر ميلفوس
يمكننا الاختيار من بين أربعة خيارات للنشر لبدء استخدام ميلفوس: ميلفوس لايت، ميلفوس مستقل، ميلفوس الموزع، وزيليز كلاود (ميلفوس المدارة). تم تصميم كل خيار نشر ليناسب سيناريوهات مختلفة في حالة استخدامنا، مثل حجم بياناتنا، والغرض من تطبيقنا، وحجم تطبيقنا.
ميلفوس لايت
MilvusLite هو إصدار خفيف الوزن من Milvus وأسهل طريقة بالنسبة لنا للبدء. في القسم التالي، سنرى في القسم التالي كيف يمكننا تشغيل ميلفوس لايت، وكل ما علينا فعله للبدء هو تثبيت مكتبة Pymilvus باستخدام pip. بعد ذلك، يمكننا تنفيذ معظم الوظائف الأساسية لـ Milvus كقاعدة بيانات متجهة.
يعد Milvus Lite مثاليًا لأغراض النماذج الأولية السريعة أو لأغراض التعلم ويمكن تشغيله في دفتر ملاحظات Jupyter دون أي إعداد معقد. فيما يتعلق بتخزين المتجهات، فإن Milvus Lite مناسب لتخزين ما يصل إلى مليون متجه تقريبًا. نظرًا لخفة وزنه وسعته التخزينية، يعد Milvus Lite خيارًا مثاليًا للنشر للعمل مع الأجهزة المتطورة، مثل محرك البحث عن المستندات الخاصة، واكتشاف الكائنات على الجهاز، وما إلى ذلك.
ميلفوس مستقل
Milvus Standalone هو عبارة عن نشر خادم أحادي الجهاز معبأ في صورة Docker. لذلك، كل ما علينا فعله للبدء هو تثبيت Milvus في Docker، ثم بدء تشغيل حاوية Docker. سنرى أيضًا التنفيذ التفصيلي لـ Milvus Standalone في القسم التالي.
يعتبر Milvus Standalone مثاليًا لبناء وإنتاج تطبيقات صغيرة إلى متوسطة الحجم، حيث أنه قادر على تخزين ما يصل إلى 10 ملايين من التضمينات المتجهة. بالإضافة إلى ذلك، يوفر Milvus Standalone توافرًا عاليًا من خلال وضع النسخ الاحتياطي الأساسي، مما يجعله موثوقًا للغاية للاستخدام في التطبيقات الجاهزة للإنتاج.
يمكننا أيضًا استخدام Milvus Standalone، على سبيل المثال، بعد إجراء نماذج أولية سريعة وتعلم وظائف Milvus مع Milvus Lite، حيث يشترك كل من Milvus Standalone و Milvus Lite في نفس واجهة برمجة التطبيقات من جانب العميل.
ميلفوس الموزع
Milvus Distributed هو خيار نشر يستفيد من بنية قائمة على السحابة، حيث يتم التعامل مع استيعاب البيانات واسترجاعها بشكل منفصل، مما يسمح بتطبيق فعال وقابل للتطوير بدرجة كبيرة.
لتشغيل Milvus Distributed، نحتاج عادةً إلى استخدام مجموعة Kubernetes للسماح بتشغيل الحاوية على أجهزة وبيئات متعددة. يضمن تطبيق مجموعة Kubernetes العنقودية قابلية التوسع والمرونة في تطبيق Milvus Distributed في تخصيص الموارد المخصصة حسب الطلب وعبء العمل. وهذا يعني أيضًا أنه في حالة فشل أحد الأجزاء، يمكن أن يحل محله أجزاء أخرى، مما يضمن بقاء النظام بأكمله دون انقطاع.
يستطيع نظام Milvus Distributed التعامل مع ما يصل إلى عشرات المليارات من التضمينات المتجهة وهو مصمم خصيصًا لحالات الاستخدام التي تكون فيها البيانات كبيرة جدًا بحيث لا يمكن تخزينها في جهاز خادم واحد. لذلك، فإن خيار النشر هذا مثالي لعملاء المؤسسات التي تخدم قاعدة مستخدمين كبيرة.
الشكل: إمكانية تخزين متجه التضمين المتجه لخيارات النشر المختلفة لـ Milvus.
في هذه المقالة، سنوضح لك كيفية البدء باستخدام كل من Milvus Lite و Milvus Standalone، حيث يمكنك البدء بسرعة باستخدام كلا الطريقتين دون الحاجة إلى إعداد معقد. ومع ذلك، فإن إعداد Milvus Distributed أكثر تعقيدًا. بمجرد إعداد Milvus Distributed، تتشابه التعليمات البرمجية والعملية المنطقية لإنشاء المجموعات واستيعاب البيانات وإجراء البحث المتجه وما إلى ذلك مع Milvus Lite و Milvus Standalone، حيث يتشاركان نفس واجهة برمجة التطبيقات من جانب العميل.
بالإضافة إلى خيارات النشر الثلاثة المذكورة أعلاه، يمكنك أيضًا تجربة Milvus المُدارة على Zilliz Cloud لتجربة خالية من المتاعب. سنتحدث أيضًا عن Zilliz Cloud لاحقًا في هذه المقالة.
البدء باستخدام ميلفوس لايت
يمكن تنفيذ Milvus Lite على الفور باستخدام Python عن طريق استيراد مكتبة تسمى Pymilvus باستخدام pip. قبل تثبيت Pymilvus، تأكد من أن بيئتك تفي بالمتطلبات التالية:
أوبونتو >= 20.04 (x86_64 و arm64)
MacOS >= 11.0 (Apple Silicon M1/M2 و x86_64)
بايثون 3.7 أو أحدث
بمجرد استيفاء هذه المتطلبات، يمكنك تثبيت Milvus Lite والتبعيات اللازمة للعرض التوضيحي باستخدام الأمر التالي:
!pip install -U pymilvus
!pip install "pymilvus[model]"
!pip install -U pymilvus
: يقوم هذا الأمر بتثبيت أو ترقية مكتبةpymilvus
، وهي مجموعة أدوات تطوير البرمجيات الخاصة بـ Python SDK الخاصة بـ Milvus. يتم تجميع Milvus Lite مع PyMilvus، لذا فإن هذا السطر الوحيد من التعليمات البرمجية هو كل ما تحتاجه لتثبيت Milvus Lite.!pip install "pymilvus[model]"
: يضيف هذا الأمر ميزات متقدمة وأدوات إضافية مدمجة مسبقًا مع Milvus، بما في ذلك نماذج التعلم الآلي مثل محولات تعانق الوجوه، ونماذج تضمين الذكاء الاصطناعي جينا، ونماذج إعادة ترتيب النماذج.
فيما يلي الخطوات التي سنتبعها مع Milvus Lite:
تحويل البيانات النصية إلى تمثيل التضمين الخاص بها باستخدام نموذج تضمين.
إنشاء مخطط في قاعدة بيانات Milvus لتخزين بياناتنا النصية وتمثيلات التضمين الخاصة بها.
تخزين بياناتنا وفهرستها في مخططنا.
إجراء بحث متجه بسيط على البيانات المخزنة.
الشكل: سير عمل عملية البحث المتجه.
لتحويل البيانات النصية إلى تضمينات متجه، سنستخدم نموذج تضمين من SentenceTransformers يسمى "all-MiniLM-L6-v2". يقوم نموذج التضمين هذا بتحويل نصنا إلى تضمين متجه ذي 384 بُعدًا. لنقم بتحميل النموذج وتحويل بياناتنا النصية وتجميع كل شيء معًا.
from pymilvus import model
docs = [
"Artificial intelligence was founded as an academic discipline in 1956.",
"Alan Turing was the first person to conduct substantial research in AI.",
"Born in Maida Vale, London, Turing was raised in southern England.",
]
sentence_transformer_ef = model.dense.SentenceTransformerEmbeddingFunction(
model_name='all-MiniLM-L6-v2',
device='cpu'
)
vectors = sentence_transformer_ef.encode_documents(docs)
data = [ {"id": i, "vector": vectors[i], "text": docs[i]} for i in range(len(vectors)) ]
بعد ذلك، دعنا ننشئ مخططًا لتخزين جميع البيانات أعلاه في ميلفوس. كما ترى أعلاه، تتكون بياناتنا من ثلاثة حقول: المعرف والمتجه والنص. لذلك، سنقوم بإنشاء مخطط بهذه الحقول الثلاثة.
from pymilvus import MilvusClient, DataType, db, connections
schema = MilvusClient.create_schema(
auto_id=False,
enable_dynamic_field=True,
)
# Add fields to schema
schema.add_field(field_name="id", datatype=DataType.INT64, is_primary=True)
schema.add_field(field_name="vector", datatype=DataType.FLOAT_VECTOR, dim=384)
schema.add_field(field_name="text", datatype=DataType.VARCHAR, max_length=512)
باستخدام Milvus Lite، يمكننا بسهولة إنشاء مجموعة على قاعدة بيانات معينة استنادًا إلى المخطط المحدد أعلاه، بالإضافة إلى إدراج البيانات وفهرستها في المجموعة في بضعة أسطر من التعليمات البرمجية.
client = MilvusClient("./milvus_demo.db")
index_params = client.prepare_index_params()
# Add indexes
index_params.add_index(
field_name="vector",
index_type="AUTOINDEX",
metric_type="COSINE"
)
# Create collection
client.create_collection(
collection_name="demo_collection",
schema=schema,
index_params=index_params
)
# Insert data into collection
res = client.insert(
collection_name="demo_collection",
data=data
)
في الكود أعلاه، ننشئ مجموعة تسمى "demo_collection" داخل قاعدة بيانات Milvus باسم "milvus_demo". بعد ذلك، نقوم بفهرسة جميع بياناتنا في "demo_collection" التي أنشأناها للتو.
الآن بعد أن أصبح لدينا بياناتنا داخل قاعدة البيانات، يمكننا إجراء بحث متجه عليها لأي استعلام معين. لنفترض أن لدينا استعلام: "من هو آلان تورينج؟ يمكننا الحصول على الإجابة الأنسب للاستعلام من خلال تنفيذ الخطوات التالية:
تحويل استعلامنا إلى تضمين متجه باستخدام نفس نموذج التضمين الذي استخدمناه لتحويل بياناتنا في قاعدة البيانات إلى تضمينات.
احسب التشابه بين تضمين الاستعلام لدينا وتضمين كل إدخال في قاعدة البيانات باستخدام مقاييس مثل تشابه جيب التمام أو المسافة الإقليدية.
جلب الإدخال الأكثر تشابهًا باعتباره الإجابة المناسبة لاستعلامنا.
فيما يلي تنفيذ الخطوات المذكورة أعلاه باستخدام Milvus:
query = ["Who is Alan Turing"]
query_embedding = sentence_transformer_ef.encode_queries(query)
# Load collection
client.load_collection(
collection_name="demo_collection"
)
# Vector search
res = client.search(
collection_name="demo_collection",
data=query_embedding,
limit=1,
output_fields=["text"],
)
print(res)
"""
Output:
data: ["[{'id': 1, 'distance': 0.7199002504348755, 'entity': {'text': 'Alan Turing was the first person to conduct substantial research in AI.'}}]"]
"""
وهذا كل شيء! يمكنك أيضًا معرفة المزيد حول الوظائف الأخرى التي يقدمها ملفوس، مثل إدارة قواعد البيانات، وإدراج المجموعات وحذفها، واختيار طريقة الفهرسة المناسبة، وإجراء عمليات بحث متجهية أكثر تقدمًا باستخدام تصفية البيانات الوصفية والبحث المختلط في وثائق ملفوس.
الشروع في العمل مع ميلفوس Standalone
Milvus Standalone هو خيار نشر يتم فيه تعبئة كل شيء في حاوية Docker. لذلك، نحتاج إلى تثبيت Milvus في Docker ثم بدء تشغيل حاوية Docker لبدء استخدام Milvus Standalone.
قبل تثبيت Milvus Standalone، تأكد من استيفاء كل من أجهزتك وبرامجك للمتطلبات الموضحة في هذه الصفحة. تأكد أيضًا من تثبيت Docker. لتثبيت Docker، راجع هذه الصفحة.
بمجرد أن يستوفي نظامنا المتطلبات وقمنا بتثبيت Docker، يمكننا متابعة تثبيت Milvus في Docker باستخدام الأمر التالي:
# Download the installation script
$ curl -sfL <https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh> -o standalone_embed.sh
# Start the Docker container
$ bash standalone_embed.sh start
في الشيفرة أعلاه، نبدأ أيضًا ببدء تشغيل حاوية Docker وبمجرد بدء تشغيلها، ستحصل على مخرجات مشابهة كما هو موضح أدناه:
الشكل: رسالة بعد بدء تشغيل حاوية Docker بنجاح.
بعد تشغيل البرنامج النصي للتثبيت "standalone_embed.sh" أعلاه، يتم بدء تشغيل حاوية Docker المسماة "milvus" على المنفذ 19530. لذلك، يمكننا إنشاء قاعدة بيانات جديدة بالإضافة إلى الوصول إلى جميع الأشياء المتعلقة بقاعدة بيانات Milvus من خلال الإشارة إلى هذا المنفذ عند إنشاء الاتصالات.
لنفترض أننا نريد إنشاء قاعدة بيانات تسمى "milvus_demo"، على غرار ما فعلناه في Milvus Lite أعلاه. يمكننا القيام بذلك على النحو التالي:
conn = connections.connect(host="127.0.0.1", port=19530)
database = db.create_database("milvus_demo")
client = MilvusClient(
uri="<http://localhost:19530>",
token="root:Milvus",
db_name="milvus_demo"
)
بعد ذلك، يمكنك التحقق مما إذا كانت قاعدة البيانات التي تم إنشاؤها حديثًا باسم "milvus_demo" موجودة بالفعل في مثيل Milvus الخاص بك عن طريق الوصول إلى واجهة مستخدم Milvus Web UI. كما يوحي الاسم، فإن واجهة مستخدم الويب Milvus Web UI هي واجهة مستخدم رسومية توفرها Milvus لمراقبة الإحصائيات والمقاييس الخاصة بالمكونات، والتحقق من قائمة وتفاصيل قواعد البيانات والمجموعات والتكوينات. يمكنك الوصول إلى واجهة مستخدم Milvus Web UI بمجرد بدء تشغيل حاوية Docker أعلاه على http://127.0.0.1:9091/webui/.
إذا قمت بالوصول إلى الرابط أعلاه، سترى صفحة هبوط مثل هذه:
تحت علامة التبويب "المجموعات"، سترى أنه تم إنشاء قاعدة بيانات "milvus_demo" بنجاح. كما ترى، يمكنك أيضًا التحقق من أشياء أخرى مثل قائمة المجموعات والتكوينات والاستعلامات التي أجريتها وما إلى ذلك، باستخدام واجهة مستخدم الويب هذه.
الآن يمكننا تنفيذ كل شيء تمامًا كما رأينا في قسم ميلفوس لايت أعلاه. لنقم بإنشاء مجموعة تسمى "demo_collection_collection" داخل قاعدة بيانات "milvus_demo" التي تتكون من ثلاثة حقول، وهي نفس ما كان لدينا في قسم Milvus Lite من قبل. بعد ذلك، سنقوم بإدخال بياناتنا في المجموعة.
index_params = client.prepare_index_params()
# Add indexes
index_params.add_index(
field_name="vector",
index_type="AUTOINDEX",
metric_type="COSINE"
)
# Create collection
client.create_collection(
collection_name="demo_collection",
schema=schema,
index_params=index_params
)
# Insert data into collection
res = client.insert(
collection_name="demo_collection",
data=data
)
الكود الخاص بإجراء عملية البحث المتجه هو نفسه الموجود في Milvus Lite، كما ترى في الكود أدناه:
query = ["Who is Alan Turing"]
query_embedding = sentence_transformer_ef.encode_queries(query)
# Load collection
client.load_collection(
collection_name="demo_collection"
)
# Vector search
res = client.search(
collection_name="demo_collection",
data=query_embedding,
limit=1,
output_fields=["text"],
)
print(res)
"""
Output:
data: ["[{'id': 1, 'distance': 0.7199004292488098, 'entity': {'text': 'Alan Turing was the first person to conduct substantial research in AI.'}}]"]
"""
بصرف النظر عن استخدام Docker، يمكنك أيضًا استخدام Milvus Standalone مع Docker Compose (لنظام لينكس) و Docker Desktop (لنظام ويندوز).
عندما لا نستخدم مثيل Milvus بعد الآن، يمكننا إيقاف Milvus Standalone باستخدام الأمر التالي:
$ bash standalone_embed.sh stop
ميلفوس المدارة بالكامل
طريقة بديلة لبدء استخدام ميلفوس هي من خلال بنية تحتية أصلية قائمة على السحابة في Zilliz Cloud، حيث يمكنك الحصول على تجربة خالية من المتاعب وأسرع 10 مرات.
تقدم Zilliz Cloud مجموعات مخصصة مع بيئات وموارد مخصصة لدعم تطبيق الذكاء الاصطناعي الخاص بك. ونظراً لأنها قاعدة بيانات قائمة على السحابة مبنية على Milvus، فإننا لا نحتاج إلى إعداد وإدارة البنية التحتية المحلية. توفر Zilliz Cloud أيضًا ميزات أكثر تقدمًا، مثل الفصل بين التخزين المتجه والحساب، والنسخ الاحتياطي للبيانات إلى أنظمة تخزين الكائنات الشائعة مثل S3، والتخزين المؤقت للبيانات لتسريع عمليات البحث عن المتجهات واسترجاعها.
ومع ذلك، هناك شيء واحد يجب مراعاته عند التفكير في الخدمات المستندة إلى السحابة هو التكلفة التشغيلية. في معظم الحالات، ما زلنا بحاجة إلى الدفع حتى عندما تكون المجموعة خاملة بدون استيعاب بيانات أو نشاط بحث متجه. إذا كنت ترغب في تحسين التكلفة التشغيلية والأداء التشغيلي لتطبيقك بشكل أكبر، فإن Zilliz Cloud Serverless سيكون خيارًا ممتازًا.
الشكل: المزايا الرئيسية لاستخدام Zilliz Cloud Serverless.
يتوفر Zilliz Cloud Serverless على مزودي الخدمات السحابية الرئيسيين مثل AWS و Azure و GCP. يوفر ميزات مثل تسعير الدفع حسب الاستخدام، مما يعني أنك تدفع فقط عند استخدامك للمجموعة.
تطبق Zilliz Cloud Serverless أيضًا تقنيات متقدمة مثل التكتلات المنطقية، والتوسع التلقائي، والتخزين المتدرج، وفصل البيانات المتدفقة والتاريخية، وفصل البيانات الباردة والساخنة. تُمكِّن هذه الميزات Zilliz Cloud Serverless من تحقيق وفورات في التكاليف تصل إلى 50 ضعفًا وعمليات بحث متجه أسرع 10 مرات تقريبًا مقارنةً بـ Milvus داخل الذاكرة.
الشكل: رسم توضيحي للتخزين المتدرج وفصل البيانات الباردة والساخنة.
إذا كنت ترغب في البدء في استخدام Zilliz Cloud Serverless، راجع هذه الصفحة لمزيد من المعلومات.
الخلاصة
تبرز Milvus كقاعدة بيانات متجهة متعددة الاستخدامات وقوية مصممة لمواجهة تحديات إدارة البيانات غير المهيكلة وإجراء عمليات بحث متجهة سريعة وفعالة في تطبيقات الذكاء الاصطناعي الحديثة. وبفضل خيارات النشر مثل Milvus Lite للنماذج الأولية السريعة، و Milvus Standalone للتطبيقات الصغيرة والمتوسطة الحجم، و Milvus Distributed لقابلية التوسع على مستوى المؤسسات، فإنه يوفر مرونة تتناسب مع حجم أي مشروع وتعقيده.
بالإضافة إلى ذلك، يعمل Zilliz Cloud Serverless على توسيع قدرات Milvus إلى السحابة ويوفر نموذجًا فعالاً من حيث التكلفة والدفع حسب الاستخدام يلغي الحاجة إلى البنية التحتية المحلية. وبفضل الميزات المتقدمة مثل التخزين المتدرج والتوسع التلقائي، يضمن Zilliz Cloud Serverless عمليات بحث أسرع في البحث المتجه مع تحسين التكاليف.
- ما هو ميلفوس؟
- خيارات نشر ميلفوس
- البدء باستخدام ميلفوس لايت
- الشروع في العمل مع ميلفوس Standalone
- ميلفوس المدارة بالكامل
- الخلاصة
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word