ไฮไลท์ • ภาพรวม • ติดตั้ง • เริ่มต้นใช้งาน • ฮับ • เอกสารประกอบ • บทช่วยสอน • การสนับสนุน • บันทึกประจำรุ่น • บล็อก
GNES [ jee-nes ] คือ Generic Neural Elastic Search ซึ่งเป็นระบบค้นหาความหมายแบบคลาวด์เนทีฟที่ใช้โครงข่ายประสาทเชิงลึก
GNES ช่วยให้สามารถค้นหาดัชนีขนาดใหญ่และความหมายสำหรับ ข้อความเป็นข้อความ รูปภาพเป็นรูปภาพ วิดีโอเป็นวิดีโอ และรูปแบบเนื้อหา แบบใดก็ได้
- หากต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับหลักการสำคัญของ GNES โปรดอ่านโพสต์ในบล็อกนี้
Cloud-Native และยืดหยุ่น | -ง่ายต่อการใช้งาน | -ทันสมัยที่สุด |
---|---|---|
GNES เป็น ไมโครเซอร์วิสแบบครบวงจร ! ตัวเข้ารหัส ตัวสร้างดัชนี ตัวประมวลผลล่วงหน้า และเราเตอร์ทั้งหมดทำงานในคอนเทนเนอร์ของตัวเอง พวกเขาสื่อสารผ่าน API เวอร์ชันต่างๆ และทำงานร่วมกันภายใต้การควบคุมของ 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 ตั้งแต่ต้นจนจบ |
ตั้งแต่วันที่ 10/10/2019 เราได้หยุดโฮสต์มิเรอร์สาธารณะ 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] | |
แพ็คเกจ Githubdocker.pkg.github.com/gnes-ai/gnes/gnes:[tag] |
pip
คุณยังสามารถติดตั้ง GNES เป็นแพ็คเกจ Python3 ผ่านทาง:
pip install gnes
โปรดทราบว่าการดำเนินการนี้จะติดตั้ง GNES เวอร์ชัน "แบร์โบน" เท่านั้น ประกอบด้วย การพึ่งพาขั้นต่ำ สำหรับการรัน GNES จะไม่มีการติดตั้งโมเดลที่ได้รับการฝึกล่วงหน้าจากบุคคลที่สาม แพ็คเกจการเรียนรู้เชิงลึก/NLP/CV เราตั้งค่านี้เป็นพฤติกรรมการติดตั้งเริ่มต้น เนื่องจากโมเดลที่สนใจวิศวกร NLP อาจไม่สนใจวิศวกร CV ใน GNES โมเดลจะทำหน้าที่เป็นปลั๊กอิน Docker
- Tensorflow, Pytorch และ torchvision ไม่ได้เป็นส่วนหนึ่งของการติดตั้ง GNES คุณอาจต้องติดตั้งล่วงหน้าทั้งนี้ขึ้นอยู่กับรุ่นของคุณ
แม้ว่าจะไม่แนะนำ แต่คุณสามารถติดตั้ง GNES แบบพึ่งพาได้เต็มรูปแบบผ่านทาง:
pip install gnes[all]
pip ติดตั้ง gnes [เบิร์ต] | เบิร์ตที่ให้บริการเซิร์ฟเวอร์>=1.8.6, เบิร์ตที่ให้บริการลูกค้า>=1.8.6 |
pip ติดตั้ง gnes [ไหวพริบ] | ไหวพริบ>=0.4.1 |
pip ติดตั้ง gnes [น่ารำคาญ] | รบกวน==1.15.2 |
pip ติดตั้ง gnes [จีน] | เจียบะ |
pip ติดตั้ง gnes [วิสัยทัศน์] | opencv-python>=4.0.0, อิมเมจแฮช>=4.0 |
pip ติดตั้ง gnes [leveldb] | ชั้น>=1.0.5 |
pip ติดตั้ง gnes [ทดสอบ] | ไพลินต์, memory_profiler>=0.55.0, psutil>=5.6.1, gputil>=1.4.0 |
pip ติดตั้ง gnes [หม้อแปลง] | หม้อแปลงไพทอร์ช |
pip ติดตั้ง gnes[onnx] | onnxruntime |
pip ติดตั้ง gnes [เสียง] | ห้องสมุด>=0.7.0 |
pip ติดตั้ง gnes [scipy] | เผ็ดร้อน |
pip ติดตั้ง gnes [nlp] | bert-serving-server>=1.8.6, pytorch-transformers, ไหวพริบ>=0.4.1, bert-serving-client>=1.8.6 |
pip ติดตั้ง gnes[cn_nlp] | pytorch-transformers, bert-serving-client>=1.8.6, bert-serving-server>=1.8.6, jieba, ไหวพริบ>=0.4.1 |
pip ติดตั้ง gnes [ทั้งหมด] | pylint, psutil>=5.6.1, pytorch-transformers,รำคาญ==1.15.2, bert-serving-client>=1.8.6, gputil>=1.4.0, bert-serving-server>=1.8.6, imagehash >=4.0, onnxruntime, memory_profiler>=0.55.0, jieba, ไหวพริบ>=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 เราได้ใช้ตัวประมวลผลล่วงหน้า ตัวเข้ารหัส ตัวสร้างดัชนีเพื่อประมวลผลรูปแบบเนื้อหาต่างๆ เช่น รูปภาพ ข้อความ วิดีโอ นอกจากนี้ยังง่ายมากที่จะเชื่อมต่อการใช้งานของคุณเอง ซึ่งเราจะเห็นตัวอย่างในภาคต่อ
ตอนนี้เรามีแอพมากมายแล้ว เราคาดหวังให้พวกเขาทำอะไร? ระบบการค้นหาทั่วไปมีหน้าที่พื้นฐานสองประการ: ดัชนี และ แบบสอบถาม Index กำลังจัดเก็บเอกสาร แบบสอบถามกำลังค้นหาเอกสาร ในระบบการค้นหาแบบนิวรัล เราอาจเผชิญกับงานอื่น: ฝึก โดยที่หนึ่งจะปรับแต่งตัวเข้ารหัส/ตัวประมวลผลล่วงหน้าตามการกระจายข้อมูลเพื่อให้บรรลุความเกี่ยวข้องในการค้นหาที่ดีขึ้น
งานทั้งสามนี้สอดคล้องกับ เวิร์กโฟลว์ ที่แตกต่างกันสามแบบใน GNES
ตั้งแต่
v0.0.46
GNES Flow ได้กลายเป็นอินเทอร์เฟซหลักของ GNES GNES Flow มอบวิธี แบบ Python และ ใช้งานง่าย ในการใช้ งานเวิร์กโฟลว์ ทำให้ผู้ใช้สามารถเรียกใช้หรือแก้ไขข้อบกพร่อง GNES บนเครื่องท้องถิ่นได้ ตามค่าเริ่มต้น GNES Flow จะจัดเตรียมไมโครเซอร์วิสทั้งหมดโดยใช้แบ็กเอนด์แบบมัลติเธรดหรือหลายกระบวนการ นอกจากนี้ยังสามารถส่งออกไปยังการกำหนดค่า Docker Swarm/Kubernetes YAML ได้อีกด้วย ทำให้สามารถส่ง GNES ไปยังคลาวด์ได้
- สามารถดูตัวอย่างที่สมบูรณ์และ Jupyter Notebook ที่เกี่ยวข้องได้ที่นี่
ในตัวอย่างนี้ เราจะใช้ gnes.flow
API ใหม่ (จำเป็นต้องมี 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 repo นี้จะได้รับการอัปเดตโดยอัตโนมัติเมื่อมีการอัปเดต GNES ต้นแบบหรือมีการเปิดตัว GNES เวอร์ชันใหม่
❤️จุดเริ่มต้นนั้นยากที่สุดเสมอ แต่อย่ากลัวเลย แม้ว่าคุณจะพบว่าพิมพ์ผิด ไม่มีเอกสารหรือการทดสอบหน่วย คุณก็สามารถแก้ไขได้โดยส่งคำมั่นสัญญากับ GNES นี่คือขั้นตอน:
fix-gnes-typo-1
fix(readme): improve the readability and move sections
fix(readme): improve the readability and move sections
ทำได้ดี! เมื่อ PR ถูกรวมเข้าด้วยกัน ต่อไปนี้เป็นสิ่งที่เกิดขึ้นต่อไป:
-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 License เวอร์ชัน 2.0
Tencent มีความยินดีที่จะสนับสนุนชุมชนโอเพ่นซอร์สด้วยการทำให้ GNES พร้อมใช้งาน