±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½éÉÜÁËȫջ»úÆ÷ѧϰƽ̨¡¢¹Ø¼ü¼Ü¹¹ÒòËØ¡¢¼Ü¹¹Éè¼Æ¡¢Hadoop¼¯³É¡¢ÌØÕ÷´¦ÀíPipelineµÈµÈÏà¹ØÄÚÈÝ¡£
±¾ÎÄÀ´×ÔÓÚ¼òÊ飬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼¡¢ÍƼö¡£ |
|
Óû§Êý¾Ý´ó¹æÄ£»ýÀÛ¡¢Óû§ÌåÑéÐèÇóÉý¼¶¡¢ËãÁ¦¸ïкͼÆËãÄ£Ð͵ÄÑݽøÕâÈý´óºËÐÄÒªËØ¼°ÆäÏ໥×÷ÓóÉΪÏÖÔÚºÍδÀ´»ùÓÚÍøÂ绥ÁªÓû§»î¶¯µÄÖ÷Òª×é³É²¿·Ö¡£»úÆ÷ѧϰƽ̨×÷ΪʹÊý¾Ý¡¢¼ÆËãºÍÓû§ÌåÑéÈýÕßÏ໥×÷ÓõĹؼü»ù´¡ÉèÊ©·¢»Ó×Å×÷Óá£
Êý¾Ý
Óû§ÔÚAPPÉÏÿ¸öµã»÷£¬»®¹ý£¬´ÓÒ»¸öAPPÇл»µ½ÁíÒ»APP£¬ÔÚÿ¸öÒ³ÃæµÄÍ£Áô£¬ÉõÖÁä¯ÀÀµÄ×¢ÒâÁ¦ºÍËÙ¶È£»ÆÁÄ»¡¢µç³Ø¡¢GPS¶¨Î»¡¢Ô˶¯´«¸ÐÆ÷......µÈÉ豸µÄÔËÐÐÊý¾Ý¡£ÈËÃǵĸ÷ÖÖÊý¾ÝÎÞʱ²»¿ÌµÄ±»¼Ç¼¡¢´æ´¢ºÍ¼ÆËã¡£
Êý¾ÝµÄÓÃ;Ҳ´ÓÊÂÎñ½»Òס¢Í³¼Æ·ÖÎöµ½ÌåÑéÓÅ»¯½øÐÐÁËÒ»¸öÍêÕûµÄÑݽøµü´ú¡£
ËãÁ¦&¼ÆËãÄ£ÐÍ
´Óµ¥ºËCPUµ½HPC£¬ÔÙµ½»ùÓÚ΢Äں˵ÄGPU£¬Íâ´æºÍÄÚ´æÈÝÁ¿ºÍËٶȵIJ»¶ÏÔö³¤£¬ÍòÕ×ÍøÂç¡¢InfiniBand¡¢RDMAÍøÂç¼¼ÊõµÄ·¢Õ¹ºÍÓ¦Óá£ÎÒÃÇ×ß¹ýµÄ¶Ì¶ÌÊýÊ®ÄêÖУ¬ËãÁ¦µÄ¸ïÐÂÒѾÊÇÓкܴóµÄ±ä»¯£¬Í¬Ê±ÊÊÅäÓÚ¼ÆËãÓ²¼þµÄеļÆËãÄ£Ð͵ķ¢Õ¹£º´Ó·Ö²¼Ê½µÄRPC£¬µ½»ùÓÚµÍI/O³É±¾µÄMapReduce£¬·¢Õ¹µ½GPUµÄ¾ØÕóÔËËãµÈ£¬¼ÆËãÄ£ÐÍÒ²ÔÚÓ°Ïì×ÅÈí¼þ¿ª·¢µÄ±ä¸ï¡£

Data Computing Revolution
Óû§ÌåÑé
×ʼÓû§ÊÇÔÚ»ùÓÚÃüÁîÐÐ/×ÀÃæ½øÐÐÖ¸ÁîÐÔ½»»¥£¬ËæºóÃÅ»§Ê±´úÊÇ»ùÓÚÀàÄ¿×éÖ¯µÄÐÅÏ¢ä¯ÀÀ£¬ËÑË÷ÒýÇæ¸øÎÒÃÇ´øÀ´µÄÊÇÓû§Ö÷¶¯ÐÅÏ¢¼ìË÷ÌåÑ飬¶ø½ñ¸÷ÖÖFeed´óÐÐÆäµÀ¡£Óû§ÔÚ¡°ÀÁ¡±µÄµÀ·ÉÏһ·Ïòǰ£¬Óû§²ÎÓëÐÅÏ¢½»»¥¸ü¹ã¡¢¸üÉÐÅÏ¢»ñÈ¡¸ü¼Ó¼òµ¥¸ßЧ¡£
Óû§¡¢Êý¾ÝºÍ¼ÆËãÕýÔÚÒÔǰËùδÓеij̶ȲÎÓë²¢¼ÓËÙÖØ¹¹ÈËÀàÉú»î·½Ê½¡£
ȫջ»úÆ÷ѧϰƽ̨
Ò»¸öÁ¼ºÃµÄ»úÆ÷ѧϰƽ̨²úÆ·ÐèÒªÂú×ãÕû¸öÊý¾Ý¿ÆÑ§µÄÍêÕûÉúÃüÖÜÆÚµÄ¸÷¸ö»·½Ú¡£ÔÚ²úÆ·Éè¼Æ·½ÃæÐèÒª¿¼Âǵ½£º
ȫջÓû§ÌåÑé
Óû§Êý¾Ý¿ÆÑ§µÄËùÓлÐèÒªÔÚÒ»¸ö²úÆ·ÖÐÎÞ·ìÇÒÎÞ²î±ðÌåÑ鵨Íê³É£¬ÕâÊǽâ·ÅÊý¾Ý¿ÆÑ§¼ÒÉú²úÁ¦£¬·þÎñÊý¾Ý¿ÆÑ§¼Ò¾Û½¹ÓÚÆäºËÐŤ×÷µÄ»ù´¡
¹¤³ÌÄÜÁ¦ºÍÊý¾Ý¿ÆÑ§½âñî
Íê³ÉÒ»¸öÍêÕûµÄÊý¾Ý½ÓÈë¡¢ÌØÕ÷´¦Àí¡¢Ä£ÐÍѵÁ·ÓÅ»¯¼°Ä£ÐÍÉÏÏß·þÎñµÄÕûÌ幤×÷£¬ÓÈÆäÔÚÃæÏò´ó¹æÄ£/³¬´ó¹æÄ£Êý¾ÝºÍÄ£Ð͵ÄÇé¿öÏ£¬Êý¾Ý´æ´¢¸ñʽ£¬¶à»ú¶à¿¨Ðͬ¼ÆË㣬×ÊÔ´µ÷¶È¹ÜÀí£¬Ä£Ð͵¯ÐÔÉìËõµÈ¹¤³Ì»¯¹¤×÷ÊDZز»¿ÉÉٵġ£ÈÃÓû§¶ÔÎÞ¸ÐÖª»òÕßÌṩÒ×ÓõÄ×Ô¶¨ÒåÍê³É¶Ô¸´ÔÓ¹¤³ÌµÄÓ¦ÓÃ
¿ª·ÅÐÔ
ͨ³£Ò»¸öÍŶÓÖеÄÊý¾Ý¿ÆÑ§¾ßÓв»Í¬µÄ¼¼Êõ±³¾°£¬²»Í¬µÄ¼ÆËã¿ò¼ÜÓÐÆäÌØ¶¨£¬Í¨ÓõĻúÆ÷Ñ§Ï°Æ½Ì¨ÃæÏòµÄ³¡¾°ºÍÈÎÎñ¾ßÓжàÑùÐÔ£»Æ½Ì¨Òª¶Ô±ä»¯¿ª·¢£¬ÒÔ¸ßЧµÄ·½Ê½Ö§³Ö²»Í¬Óû§µÄÐèÇó

Hidden Technical Debt in Machine Learning Systems
¹Ø¼ü¼Ü¹¹ÒòËØ
¹¹½¨»úÆ÷ѧϰƽ̨ÐèÒªµÄ¼¼Êõ°üÀ¨ÁË´æ´¢¡¢Í¨ÐÅ¡¢¼ÆËã¡¢·Ö²¼Ê½¡¢×ÊÔ´¹ÜÀíµÈ¼ÆËã»úÌåϵÖеĺܶ༼Êõ£¬ÔÚÏîÄ¿ÖÜÆÚ¼°³É±¾Ìõ¼þÏÂÉè¼ÆÒ»¸öÃæÏòÒµÎñÇÒ¾ßÓÐÉúÃüÁ¦µÄ»úÆ÷ѧϰƽ̨¼Ü¹¹£¬ÐèÒª¿¼ÂÇÖî¶àÒòËØ£º
ÒÅÁôϵͳ¼¯³É
ͨ³£ÔÚ×éÖ¯ÖÐÒѾ´æÔÚÊý¾Ý´æ´¢¡¢×ÊÔ´µ÷¶ÈºÍÈÎÎñµ÷¶Èϵͳ£¬¼Ü¹¹Éè¼ÆÐèÒªÓµ±§ÕâЩÒÅÁôϵͳ¡£¶ÔÒÅÁôϵͳÁ¼ºÃµÄ¼¯³É²»½ö¿ÉÒÔÌáÉýÓû§ÌåÑ飬½µµÍϵͳ¸´Ôӳ̶ȣ¬»¹¿ÉÒÔËõ¶ÌʵÏÖÖÜÆÚ
Êý¾ÝºÍÄ£Ð͹æÄ£
Êý¾ÝÁ¿¡¢Ä£Ð͵ĸ´Ôӳ̶Ⱥ͹æÄ£ÒÔ¼°Óû§¶ÔÄ£ÐÍѵÁ·ÖÜÆÚµÄÈÝÈ̶Ⱦö¶¨Á˼¼ÊõÑ¡ÐͺͺËÐÄÄÜÁ¦µÄÉè¼Æ·½Ê½
×ÊÔ´¹ÜÀíµ÷¶È
ÒÀÍÐÓÚKubernetes»òÕßYARNÉè¼Æ×ÊÔ´¶ÓÁУ¬½øÐÐÒì¹¹×ÊÔ´¹ÜÀíµ÷¶È£¬È·±£×ÊÔ´µÄºÏÀí¸ßЧÀûÓÃ
Pipeline
Ò»·½Ãæ¶ÔÊý¾Ý½ÓÈë¡¢ÌØÕ÷¹¤³Ì¡¢ÑµÁ·¼°ÉÏÏߵȻ·½Úͨ¹ýPipeline×éÖ¯£¬Çý¶¯Êý¾ÝÔÚ²»Í¬¼ÆËã×é¼þÖÐÔËתÆðÀ´£¬ºÏÀíÀûÓÃÄÚ´æ¹²Ïí£¬±ÜÃâµÍЧI/O£¬´Ó¶øÏµÍ³ÐÔ½µµÍÊý¾Ý´¦ÀíÖÜÆÚ
Servingϵͳ
ServingÊÇÒ»¸öÏà¶Ô¶ÀÁ¢µÄ×Óϵͳ£¬ÐèÒª¿¼ÂÇE2EÔ¤²âÑÓʱ£¬µ¯ÐÔÉìËõÄÜÁ¦£¬Ä£ÐͰ汾¹ÜÀí£¬¼à¿Ø£¬A/B·ÖÁ÷µÈÄÜÁ¦£¬Ò»°ãServing¶¼ÊÇÎÞ״̬µÄ£¬ÊʺÏÓÃ΢·þÎñµÄ¼Ü¹¹À´ÊµÏÖ
Êý¾Ý´æ´¢ºÍ±íʾ
ÔÚÊý¾ÝÔ´£¬ÌØÕ÷¹¤³Ì¼°Ä£ÐÍѵÁ·½×¶ÎÊý¾Ý¿ÉÄÜÒÔ²»Í¬ÐÎʽ´æ´¢ÔÚ²»Í¬µÄ½éÖÊÉÏ£»Í¬Ê±Êý¾ÝÓÐDense»òÕßSparse²»Í¬Ìص㣬ÒÔ¼°Êý¾Ý¿ÉÄÜ´æ´¢ÔÚµ¥»ú»òÕß·Ö²¼Ê½¶à½ÚµãÉÏ¡£ÐèÒª¿¼ÂÇÊý¾Ý´æ´¢¸ñʽ£¬´æ´¢½éÖÊ£¬·Ö²¼Ê½±íʾ·½Ê½
²¢Ðл¯
²¢Ðл¯²»½ö½ö´æÔÚÓÚѵÁ·½×¶Î£¬Í¬Ñù´æÔÚÓÚÊý¾Ý·ÃÎÊ£¬ÌØÕ÷´¦ÀíÉõÖÁÔÚServing½×¶Î
¼ÆËã¼ÓËÙ
³ýÁË»ùÓÚGPUµÄCUDA¼ÓËÙ£¬ÎÒÃÇͬÑù¿ÉÒÔÔÚIntel CPUÉÏÓúÏÊʵļÆËã¿âÀ´ÊµÏÖ¼ÓËÙ
ÍøÂçͨÐÅ
ÓÈÆäÔÚѵÁ·¸´ÔÓÍøÂçµÄÇé¿öÏ£¬Í¨ÐÅ¿ÉÄÜÊÇÖ÷ÒªµÄÐÔÄÜÆ¿¾±£»ºÏÀíµÄÍøÂçÍØÆËºÍÁ¬½Ó·½Ê½£¬ÒÔ¼°²ÉÓøßЧµÄͨÐÅÐÒé»á½µµÍ¼ÆËãµÈ´ý
¼Ü¹¹Éè¼Æ
´Ë´¦ÎÒÃÇÒÔÃæÏò£º
- ´æ´¢ÔÚHDFSÉÏTB¼¶Óû§ºÍÎïÆ·Êý¾ÝѵÁ·
- ÃæÏòCTR³¡¾°µÄEmbedding+MLP½á¹¹µÄÄ£ÐÍ
- ÌṩÔÚÏßµÍÑÓʱÇҿɵ¯ÐÔÉìËõµÄÅÅÐò·þÎñ
ÕâÑùÒ»¸ö¾ßÓÐͨÓó¡¾°Õ¹¿ª»úÆ÷ѧϰƽ̨µÄ¼Ü¹¹Éè¼Æ
Hadoop¼¯³É
Êý¾ÝµÄ´«ÊäºÍ´æ´¢³É±¾ºÜ¸ß£¬ÀûÓÃÒÑÓÐHadoopÌåϵµÄÍê³É»úÆ÷ѧϰƽ̨ÖкÏÊʵÄ×é¼þ½«ÓÐЧ½µ´æ´¢ºÍ´«Êä³É±¾£¬Í¬Ê±Ò²ÔÚÒ»¶¨³Ì¶ÈÉÏÈÃÆ½Ì¨±äµÄÇáÁ¿¡£ÀûÓÃHadoop
Kerberos°²È«»úÖÆ¿ÉÒÔ½«Êý¾ÝºÍ×ÊÔ´µ÷¶È»ùÓÚ×â»§¸ôÀ뿪¡£
ÔÚ¼ÆËã·½Ãæ¿ÉÒÔÓÃData LocalityÌØÐÔ½«¼ÆËãºÍÊý¾Ýµ÷¶Èµ½Í¬Ò»½áµãÉÏ£¬Òµ½çµÄTensorFlowOnSparkºÍAngel¶¼ÓÃÕâ¸ö˼·ʵÏÖHadoopÌåϵºÍ»úÆ÷ѧϰµÄ½áºÏ¡£¼òµ¥À´Ëµ¸Ã·½°¸ÊÇ£º

ͨ¹ýYARNµ÷¶ÈÌá½»Ò»¸öSpark×÷Òµ
ÔÚSparkÖе÷ÓÃforeachPartition£¬ÕâÑùÿ¸ö½áµãÉϽ«»áÔÚÄÚ´æÖгÖÓÐRDDµÄÒ»¸ö·ÖÇø
ÔÚÿ¸öWorkerÖÐͨ¹ýJNIµ÷ÓûòÕß±¾µØ½ø³ÌµÄ·½Ê½µ÷ÓÃTensorflow»òÕßTorch½øÐÐÄ£ÐͼÆËã
ÕâÑùÏ൱ÓÚSpark±ä³ÉContainer½øÐмÆËã×ÊÔ´µÄµ÷¶È£¬¶ø³ä·ÖÀûÓÃÁËÒÑÓеĴóÊý¾ÝÌåϵµÄÊý¾ÝºÍ¼ÆËãÌØÐÔ¡£
Ï¡ÊèÌØÕ÷ѹËõ&ÏòÁ¿/¾ØÕó·Ö²¼Ê½±íʾ
ÔÚ·Ö²¼Ê½»úÆ÷ѧϰ¼ÆËãÖжԷֲ¼Ê½ÏòÁ¿ºÍ¾ØÕóµÄ·Ö²¼Ê½±íʾÒÔ¼°¶ÔÏ¡ÊèÌØÕ÷µÄѹËõ´¦Àí¿ÉÒÔÌá¸ßÊý¾ÝµÄ²¢ÐмÆËã¶ÈºÍ´æ´¢Ñ¹Ëõ±È£¬SparkÖлá²ÉÓÃRowMatrix,CoordinateMatrixºÍBlockMatrixµÈ´æ´¢À´¶Ô²»Í¬ÐÎʽµÄÊý¾ÝÀàÐͽøÐоØÕó½ø±íʾ¡£
Òµ½çÒ²Óкܶà±ê×¼µÄÏ¡Êè¾ØÕóºÍ·Ö²¼Ê½¾ØÕó±íʾ·½·¨¡£

ÌØÕ÷´¦ÀíPipeline
ÔÚÌØÕ÷´¦Àí¹ý³ÌÖУ¬ÐèÒª¶ÔÀëÉ¢ºÍÁ¬ÐøµÄÌØÕ÷½øÐзÖͰ£¬±ê×¼»¯£¬Onehot±àÂëµÈÌØÕ÷´¦Àí¡£Berkeley
Data Analytics StackÖеÄSparkÊǷdz£ÊÊÓÃÓÚÌØÕ÷´¦Àí£¬²ÉÓÃSpark½øÐÐÌØÕ÷´¦Àí¿ÉÒÔ°ïÎÒÃǽâ¾öÈý¸öÖ÷ÒªµÄÎÊÌ⣺
ÄÚ´æ¼ÆË㣬¼ÓËÙÌØÕ÷´¦Àí
ÓÉÓÚÌØÕ÷´¦Àí¹ý³ÌÖд󲿷ÖÇé¿ö²»ÐèÒª½øÐÐÊý¾ÝShuffle£¬ÕâÑùÎÒÃÇ¿ÉÒԺܺõÄÀûÓÃSparkÄÚ´æ¼ÆË㣬½«¶à¸öÌØÕ÷´¦ÀíÓÃSpark
ML Pipeline´®ÁªÆðÀ´£¬ÕâÑù¿ÉÒÔÔÚ·Ö²¼Ê½µÄ½«¶à¸öÌØÕ÷´¦Àí»·½ÚÔÚÒ»¸öJobÖÐÍê³É¡£

Feature MapÒ»ÖÂÐÔ
PipelineÖеÄÿ¸öËã×Ó¶¼ÊÇÒ»¸öEstimator£¬ÎÒÃÇÔÚfit½×¶Î¼ÆËãÌØÕ÷µÄFeature
Map(ÀýÈçOnehot±àÂëÖÐÀëÉ¢Öµ¶ÔÓ¦Index)£¬È»ºóÔÚÄ£ÐÍsave½×¶Î¶ÔFeature Map½øÐÐÐòÁл¯´æ´¢£¬ÔÚtransform½×¶Î¶ÔÌØÕ÷½øÐбàÂë¡£fitʱ¿ÉÒÔ¾¡¿ÉÄܼÓÔØÈ«Á¿Êý¾Ý£¬ÕâÑùÔÚÌØÕ÷´¦Àíʱ¾Í½µµÍûÓгöÏÖ¹ýÑù±¾Öµ³öÏֵĻúÂÊ£¬¶ÔÓÚFeature
MapµÄ¸üпÉÒÔ¸ù¾ÝʵʱÐÔÒªÇó½øÐÐStream¸üлòÕßBatchÈ«Á¿¸üС£
ÌØÕ÷´¦Àí½×¶ÎÉú³ÉµÄFeature MapÒ²»áÔÚOneline½×¶Î±»¼ÓÔØ¡£
ÌØÕ÷¸ñʽ
ÔÚ½øÐÐÄ£ÐÍѵÁ·½×¶Î£¬¿ÉÄÜCSR, TFRecord»òÕ߯äËûÊý¾Ý¸ñʽ£¬¿ÉÒÔʵÏÖ×Ô¶¨ÒåÊý¾ÝÀàÐÍ£¬ÈÃSparkÀ´¶Áд×Ô¶¨ÒåµÄÊý¾Ý¸ñʽ¡£
Ê×ÏÈʵÏÖ×Ô¶¨ÒåFileReaderºÍOutputWriter
ÔÚ×Ô¶¨ÒåÊý¾ÝÔ´ÖÐÓÃ×Ô¶¨ÒåFileReaderºÍOutputWriterʵÏÖreadºÍwrite
def write(kryo:
Kryo, out: Output): Unit = {
}
def read(kryo: Kryo, in: Input): Unit = {
} |
Ê×ÏÈÔÚorg.apache.spark.sql.sources.DataSourceRegisterÖÐÌí×¢²á×Ô¶¨ÒåÊý¾ÝÔ´ÀàÐÍ
È»ºó¾Í¿ÉÒÔÏñ´¦ÀíCSV¸ñʽÊý¾ÝÒ»Ñùspark.read.format("csv")£¬´¦Àí×Ô¶¨ÒåÊý¾Ý¸ñʽ
²¢ÐмÆËã
ÔÚ´ó¹æÄ£Êý¾ÝºÍÄ£ÐÍѵÁ·µÄ³¡¾°ÖУ¬ÓÉÓÚѵÁ·Ñù±¾¹æÄ£´ó»òÕßÍøÂç²ÎÊý´ó£¬Í¨³£µ¥¸ö½Úµã²»ÄÜÍê³É¶ÔÄ£Ð͵ÄѵÁ·£¬Õâʱ¾ÍÐèÒª¶à½ÚµãÐͬµÄ·½Ê½Íê³ÉÄ£Ð͵ÄѵÁ·£¬²ÉÓ÷ֶøÖÎÖ®µÄ˼Ïë¡£Ò»°ã»áÓÐÊý¾Ý²¢ÐкÍÄ£ÐͲ¢ÐÐÁ½ÖÖ˼·À´ÊµÏÖÈÎÎñµÄ·Ö½âºÍ²¢ÐÐѵÁ·¡£
Êý¾Ý²¢ÐÐ
Ϊ²»Í¬µÄ¼ÆËã½Úµã±£Áôͬһ¸öÄ£Ð͵ĸ±±¾£¬Ã¿¸ö½Úµã·ÖÅäµ½²»Í¬µÄÊý¾Ý£¬Ã¿¸ö½ÚµãÔÚ±¾µØ¼ÆËã³ÖÓÐÊý¾ÝµÄÄ£ÐͲÎÊý£¬È»ºó½«ËùÓмÆËã½ÚµãµÄ¼ÆËã½á¹û°´ÕÕijÖÖ·½Ê½ºÏ²¢Éú³É×îÖÕµÄÄ£ÐÍ¡£
ÔÚÕâ¸ö¹ý³ÌÖÐÊý¾Ý²ð·ÖµÄ·½Ê½¿ÉÒÔÊÇËæ»úµÄ·½Ê½£¬Ò²¿ÉÒÔ²ÉÓÃshuffle»úÖÆ±£Ö¤Êý¾ÝÑù±¾µÄ¾ùºâ£»¶ø²ÎÊýͬ²½ºÍºÏ²¢·½Ê½Ö÷Á÷µÄÓÐParameter
ServerºÍRing All-Reduce·½Ê½¡£

Parameter Server
ÔÚParameter Server¼Ü¹¹ÖУ¬¼¯ÈºÖеĽڵ㱻·ÖΪÁ½ÀࣺParameter ServerºÍWorker¡£ÆäÖÐParameter
Server´æ·ÅÄ£Ð͵IJÎÊý£¬¶øWorker¸ºÔð¼ÆËã²ÎÊýµÄÌݶȡ£ÔÚÿ¸öµü´ú¹ý³Ì£¬Worker´ÓParameter
SeverÖлñµÃ²ÎÊý£¬È»ºó½«¼ÆËãµÄÌݶȷµ»Ø¸øParameter Server£¬Parameter Server¾ÛºÏ´ÓWorker´«»ØµÄÌݶȣ¬È»ºó¸üвÎÊý£¬²¢½«ÐµIJÎÊý¹ã²¥¸øWorker¡£
ÆäÖвÎÊýÔÚParameter ServerºÍWorkerÖ®¼äµÄͬ²½¼È¿ÉÒÔÊÇͬ²½µÄ(Synchronous)£¬Ò²¿ÉÒÔÊÇÒì²½µÄ(Asynchronous)¡£

Ring AllReduce
ÔÚRing-Allreduce¼Ü¹¹ÖУ¬¸÷¸ö½Úµã¶¼ÊÇWorker£¬Ã»ÓÐÖÐÐĽڵãÀ´¾ÛºÏËùÓÐWorker¼ÆËãµÄÌݶȡ£ÔÚÒ»¸öµü´ú¹ý³Ì£¬Ã¿¸öWorkerÍê³É×Ô¼ºµÄmini-batchѵÁ·£¬¼ÆËã³öÌݶȣ¬²¢½«Ìݶȴ«µÝ¸ø»·ÖеÄÏÂÒ»¸öWorker£¬Í¬Ê±ËüÒ²½ÓÊÕ´ÓÉÏÒ»¸öWorkerµÄÌݶȡ£¶ÔÓÚÒ»¸ö°üº¬N¸öWorkerµÄ»·£¬¸÷¸öWorkerÐèÒªÊÕµ½ÆäËüN-1¸öworkerµÄÌݶȺó¾Í¿ÉÒÔ¸üÐÂÄ£ÐͲÎÊý¡£

Ä£ÐͲ¢ÐÐ
Èç¹ûѵÁ·Ä£Ð͵ĹæÄ£ºÜ´ó£¬²»ÄÜÔÚÿ¸ö¼ÆËã½ÚµãµÄ±¾µØÄÚ´æÖÐÍêÈ«´æ´¢£¬ÄÇô¾Í¿ÉÒÔ¶ÔÄ£ÐͽøÐл®·Ö£¬È»ºóÿ¸ö¼ÆËã½Úµã¸ºÔð¶Ô±¾µØ¾Ö²¿Ä£Ð͵IJÎÊý½øÐиüС£Í¨³£¶ÔÏßÐÔ¿É·ÖµÄÄ£ÐͺͷÇÏßÐÔÄ£ÐÍ£¨Éñ¾ÍøÂ磩£¬Ä£ÐͲ¢Ðеķ½·¨Ò²»áÓÐËù²»Í¬¡£
ÏßÐÔÄ£ÐÍ
°ÑÄ£ÐͺÍÊý¾Ý°´ÕÕÌØÕ÷ά¶È½øÐл®·Ö£¬·ÖÅäµ½²»Í¬µÄ¼ÆËã½ÚµãÉÏ£¬ÔÚÿ¸ö¼ÆËã½ÚµãÉϲÉÓÃÌݶÈϽµÓÅ»¯Ëã·¨½øÐÐÓÅ»¯£¬¾Ö²¿µÄÄ£ÐͲÎÊý¼ÆËã²»ÒÀÀµÓÚÆäËûά¶ÈµÄÌØÕ÷£¬Ïà¶Ô¶ÀÁ¢£¬ÄÇô¾Í²»ÐèÒªÓëÆäËû½Úµã½øÐвÎÊý½»»»¡£
ÔÚAngelµÄʵÏÖÖоÍÖ÷ҪʹÓÃÄ£ÐͲ¢Ðеķ½·¨Ê¹ÓÃModelPartitionerʵÏÖÄ£ÐÍ·Ö²¼Ê½¼ÆËã¡£

Éñ¾ÍøÂç
Éñ¾ÍøÂçÖÐÄ£Ð;ßÓкÜÇ¿µÄ·ÇÏßÐÔÐÔ£¬²ÎÊýÖ®¼äÓнÏÇ¿µÄ¹ØÁªÒÀÀµ£¬Í¨³£¿ÉÒÔºáÏò°´²ã»®·Ö»ò×ÝÏò¿ç²ã»®·Ö½øÐÐÍøÂç»®·Ö¡£Ã¿¸ö¼ÆËã½Úµã¼ÆËã¾Ö²¿²ÎÊýÈ»ºóͨ¹ýRPC½«²ÎÊý´«µÝµ½ÆäËû½ÚµãÉϽøÐвÎÊýµÄºÏ²¢£¬¸´ÔÓµÄÉñ¾ÍøÂçÐèÒª½Ï¸ßµÄÍøÂç´ø¿íÀ´Íê³É½ÚµãÖ®¼äµÄͨÐÅ¡£
CTRÄ£ÐͲ¢ÐÐѵÁ·
ͨ³£µäÐÍÉî¶ÈCTRÄ£ÐÍÊÇEmbedding Layer + MLP½á¹¹£»¶ÔÓÚ10ÒÚÌØÕ÷£¬Embedding
SizeΪ16µÄCTRÄ£ÐÍÀ´ËµEmbeddingÄ£Ð͵ĴóСΪ10^9 * 16 * 4B ¡Ö 60GB£¬¶øMLPµÄ´óСֻÓм¸¸öMB¡£ÑµÁ·EmbeddingÍøÂçµÄЧÂʽ«»áÊÇCTRÄ£ÐÍѵÁ·µÄÆ¿¾±ËùÔÚ¡£Èç¹ûÔÚÍøÂçÖд«ÊäEmbeddingÄ£ÐͲÎÊý£¬Õû¸öʱÑӺͳɱ¾½«ÊDz»¿É½ÓÊܵġ£ÈçºÎ½â¾öÄ£Ð͵Ĵ洢¼°¼õÉÙÍøÂ·´«ÊäÊǹؼü£¬»ªÎªMindsporeºÍNVIDIAHugeCTR·Ö±ð¸ø³öHost-DeviceºÍEmbedding
HashtableµÄ·½°¸¡£
Host-Device

Ïêϸ½éÉܲο¼£¬¸ù¾ÝÄ£ÐÍ´óС£¬Ñ¡Ôñ½«Ä£ÐÍ·ÅÔÚDevice»òÕßHostÄÚ´æÖУ¬Device¼ÆËãÌݶȺó¸üÐÂEmbeddingÄ£ÐÍ£¬Èç¹ûÄ£ÐÍÔÚHostÄÚ´æÖУ¬Ö»ÐèÒªÔÚDeviceºÍHostÖ®¼ä½øÐÐÄڴ濽±´£¬Õâ¸öËÙ¶ÈÊÇÔ¶Ô¶´óÓÚÍøÂç´«ÊäµÄ¡£
Embedding Hash Table
HugeCTR½éÉÜÖÐÏêϸÃèÊöÆäÉè¼Æ·½°¸£ºÍ¨¹ýopen addressing hashËã·¨½«ËùÓеÄÌØÕ÷ƽ¾ùµØ·ÖÔÚËùÓÐDeviceÉÏ£¬Ã¿¸öDeviceÄÚ´æÖд洢EmbeddingµÄÒ»²¿·Ö£¬Í¨¹ýʵÏÖreduce_scatterËã×ÓʵÏÖÄ£ÐÍ´«Ê䣬all_gather½øÐÐÄ£Ðͺϲ¢¡£

ÔÚÏßServing
ÔÚʵ¼Ê³¡¾°ÖУ¬ÒµÎñ¶ÔÄ£Ð͵ÄÒªÇóÊǸ߸´ÔÓ£¬µÍÑÓʱ£¬´óÅúÁ¿£¬¸ßÍÌÍÂÁ¿ºÍµ¯ÐÔÉìËõ¡£
¶ÔÓÚ¸ßÍÌÍÂÁ¿ºÍµ¯ÐÔÉìËõµÄ´¦ÀíÎÒÃÇ¿ÉÒÔ½»¸økubernetesÀ´ÊµÏÖ£¬ÔÚÈÝÆ÷»ù´¡ÉèÊ©¾ß±¸µÄǰÌáϲ¢²»»á³ÉΪƿ¾±£¬¶ø¶ÔÓÚ¸´ÔÓÄ£ÐÍÔÚ´óbatchµÄÇëÇóºÍµÍÑÓʱµÄì¶ÜÖл¹ÊÇÐèҪͨ¹ýÉè¼ÆºÍÓÅ»¯À´ÊµÏÖ¡£
¶øÔÚ¸ü½øÒ»²½µÄÄ£ÐÍÔÚÏßÓÅ»¯ÖпÉÒÔ¿¼ÂÇͨ¹ýÄ£ÐÍÁ¿»¯ºÍÓ²¼þ¼ÓËٵIJßÂÔÌáÉýÄ£ÐÍServingÐÔÄÜ¡£
ºÏÀíʹÓûº´æºÍ¶à¼¶»º´æ½áºÏµÄÉè¼Æ·½·¨½«ÓÐЧ½µµÍ¸ßÑÓʱÇëÇó´¦Àí£¬´Ó¶øÌáÉýϵͳµÄÕûÌåÑÓʱ±íÏÖ¡£»º´æµÄÉè¼ÆÖ÷Òª¿¼ÂÇ»º´æ½éÖʵijɱ¾¡¢ÈÝÁ¿¡¢¶ÁдËÙ¶ÈÒÔ¼°»º´æ¸üвßÂÔ
¡£
|