• IIS7闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁惧墽鎳撻—鍐偓锝庝簼閹癸綁鏌i鐐搭棞闁靛棙甯掗~婵嬫晲閸涱剙顥氬┑掳鍊楁慨鐑藉磻閻愮儤鍋嬮柣妯荤湽閳ь兛绶氬鎾閳╁啯鐝曢梻浣藉Г閿氭い锔诲枤缁辨棃寮撮姀鈾€鎷绘繛杈剧秬濞咃綁濡存繝鍥ㄧ厱闁规儳顕粻鐐烘煙椤旂偓鐒挎い锕€缍婇弻鐔碱敍濮樿京鍔Δ鐘靛仦宀h法妲愰幒鎳崇喓鎮伴垾鍏呭闂佸壊鐓堥崑鍡欑不妤e啯鐓欓悗鐢登归崜鍗灻归悡搴㈩棦闁哄瞼鍠愬ḿ蹇涘礈瑜忛弳鐘绘⒑濞茶骞楁い銊ワ躬閹繝顢曢敃鈧悙濠囨煏婵炑€鍋撳┑顔兼喘濮婅櫣绱掑Ο璇叉殫闂佸摜濮甸悧鐘差嚕婵犳碍鏅搁柣妯垮皺椤︺劑姊洪棃娴ㄥ綊宕曢鈧畷鎴﹀箻鐠囪弓绱堕梺闈涱檧闂勫嫬鈻撴导瀛樷拺闁告挻褰冩禍婵囩箾閸欏鑰块柛鈺傜洴楠炴帒螖娴e搫骞堥梺璇茬箳閸嬬娀顢氳閸┾偓妞ゆ帊鐒︾粈瀣煙椤旀枻鑰块柡浣稿暣瀹曟帒鈽夊顒€绠伴梻浣筋嚙缁绘帡宕戦悢鐓庣;闁规儳澧庨惌鍡涙煕閹板吀绨界痪鎹愬亹缁辨挻鎷呯拹顖滅窗濠电偞褰冮顓㈠焵椤掑喚娼愭繛鍙夌墱缁辩偞绻濋崶銉㈠亾娴g硶鏋庨柟鐐綑娴滄鏌熼崗鍏煎剹闁哥姵顨堢槐鐐哄箻缂佹ǚ鎷绘繛杈剧秬濡嫰宕ヨぐ鎺撶厱閻庯綆鍓欐禒婊勩亜椤愶絿绠炲┑鈩冩倐閺佸倿宕滆閸熷酣姊绘笟鈧埀顒傚仜閼活垱鏅堕鐐寸厵濞撴艾鐏濇俊鐣岀磼缂佹ḿ绠炵€规洘锕㈤崺鐐村緞濮濆本顎楅梻浣筋嚙濮橈箓锝炴径濞掑搫饪伴崼婵堫槯濠殿喗銇涢崑鎾绘煏閸℃洜顦﹂摶锝嗙箾閸℃瑥浜惧鍥р攽閻樺灚鏆╅柛瀣洴閹囧川閺夋垹顢呴梺鍛婂姇濡﹤岣块弽銊х鐎瑰壊鍠曠花濂告煕鐎e墎绡€闁哄备鍓濆鍕偓锝庝憾閸ゅ顪冮妶鍡樼厸闁稿鎹囧濠氬磼濞嗘帒鍘¢梺纭呮珪閹瑰洤鐣烽悽绋垮唨妞ゆ挾鍋熼鍡涙⒑鐠恒劌娅愰柟鍑ゆ嫹
  • IIS7闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁惧墽鎳撻—鍐偓锝庝簼閹癸綁鏌i鐐搭棞闁靛棙甯掗~婵嬫晲閸涱剙顥氬┑掳鍊楁慨鐑藉磻閻愮儤鍋嬮柣妯荤湽閳ь兛绶氬鎾閳╁啯鐝曢梻浣藉Г閿氭い锔诲枤缁辨棃寮撮姀鈾€鎷绘繛杈剧秬濞咃綁濡存繝鍥ㄧ厱闁规儳顕粻鐐烘煙椤旂偓鐒挎い锕€缍婇弻鐔碱敍濮樿京鍔Δ鐘靛仦宀h法妲愰幒鎳崇喓鎮伴垾鍏呭闂佸壊鐓堥崑鍡欑不妤e啯鐓欓悗鐢登归崜鍗灻归悡搴㈩棦闁哄瞼鍠愬ḿ蹇涘礈瑜忛弳鐘绘⒑濞茶骞楁い銊ワ躬閹繝顢曢敃鈧悙濠囨煏婵炑€鍋撳┑顔兼喘濮婅櫣绱掑Ο璇叉殫闂佸摜濮甸悧鐘差嚕婵犳碍鏅搁柣妯垮皺椤︺劑姊洪棃娴ㄥ綊宕曢鈧畷鎴﹀箻鐠囪弓绱堕梺闈涱檧闂勫嫬鈻撴导瀛樷拺闁告挻褰冩禍婵囩箾閸欏鑰块柛鈺傜洴楠炴帒螖娴e搫骞堥梺璇茬箳閸嬬娀顢氳閸┾偓妞ゆ帊鐒︾粈瀣煙椤旀枻鑰块柡浣稿暣瀹曟帒鈽夊顒€绠伴梻浣筋嚙缁绘帡宕戦悢鐓庣;闁规儳澧庨惌鍡涙煕閹板吀绨界痪鎹愬亹缁辨挻鎷呯拹顖滅窗濡炪値鍓欓崥瀣Φ閸曨垱鏅滈柣锝呰嫰瀵劑姊洪崫鍕潶闁稿﹥娲滈崣鍛存煟閻樺弶绌块悘蹇旂懄缁傛帞绮欑拠鐐閹晠妫冨☉妤冩崟闂備礁鎽滈崳銉╁垂瀹曞洤鍨濇い鎾卞灪閸嬪嫰鏌i幘铏崳闁告棑绠戦—鍐Χ閸℃娼戦梺绋款儐閹稿濡甸崟顖f晝闁靛繈鍨婚鍥煟閹惧崬鈧牠濡甸崟顔剧杸闁圭偓娼欏▍锝呪攽閻愯尙澧戦柛搴ㄦ涧椤繐煤椤忓拋妫冨┑鐐村灦閼归箖銆傚ú顏呪拺闁荤喐婢橀弳杈╃磼婢跺﹦鍩g€规洘宀搁獮鎺楀籍閳ь剙鐣锋径鎰仩婵炴垶甯掓晶鏌ユ煛閸屾浜鹃梻鍌氬€风粈渚€鎮块崶顬盯宕熼瀣☉铻栧ù锝勮濞茬ǹ鈹戦悩缁樻锭婵炲眰鍨虹粋宥呪堪閸喓鍘繝鐢靛仜閻忔繈宕濆⿰鍕╀簻闁靛/鍐f瀰闂佸搫鑻粔鐑铰ㄦ笟鈧弻娑㈠箻鐠虹儤鐎荤€光偓閿濆牆鍔垫い锔炬嚀閳规垿鍨惧畷鍥х厽濡ょ姷鍋為悧妤呭箯閸涙潙浼犻柛鏇ㄥ幑閸嬪﹪姊婚崒娆戝妽闁诡喖鐖煎畷鏇灻洪鍕槶濠电偛妫欓崹鐟拔涢婊勫枑闁哄啫鐗嗙粻鏍偡濞嗗繐顏柣鐔活潐閵囧嫰寮介妸褏鐓€闁汇埄鍨崕閬嶅煘閹达箑鐏抽柧蹇e亐閺嬫瑩姊洪幖鐐插婵炲鐩敐鐐剁疀閺囩姷锛滃┑鈽嗗灥椤曆囶敁閹剧粯鈷戦柛蹇涙?閼割亪鏌涙惔銏犫枙濠碘€崇摠缁绘繈宕堕妸銏″闂傚倸鍊搁悧鍐疾濠靛牏鐭撻柛鎾茶兌绾惧ジ鏌eΟ鎸庣彧鐎规洖鐭傞弻锝呪槈閸楃偞鐏曠紓浣哄У缁嬫垿鍩ユ径濞炬瀻闁归偊鍙庢禒褔姊婚崒娆愮グ婵炲娲熷畷鎶芥晝閸屾氨顔嗛梺璺ㄥ櫐閹凤拷
  • SEO闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁惧墽鎳撻—鍐偓锝庝簼閹癸綁鏌i鐐搭棞闂囧鏌ㄥ┑鍡欏妞ゅ繒濮风槐鎺楀焵椤掍胶绡€闁稿本顨嗛弬鈧梻浣虹帛钃辩憸鏉垮暣閸┾偓妞ゆ巻鍋撴い鏇ㄥ幘濡叉劙骞橀幇浣瑰兊闁哄鐗勯崝宀勫几閹达附顥婃い鎰╁灪婢跺嫭绻涢崣澶涜€块柨婵堝仱瀵挳濮€閿涘嫬骞楅梻浣哥秺閸嬪﹪宕滈敃鍌氬惞闁绘棁娅g壕濂告煃闁款垰浜鹃梺绋款儐閹瑰洤顫忕紒妯诲閻熸瑥瀚禒鈺呮⒑缁嬪灝顒㈢紒顔芥尭閻g兘宕奸弴妞诲亾閿曞倸绠抽柡鍐ㄦ搐閻撴﹢姊婚崒姘偓鎼佸磹閹间礁纾瑰瀣捣閻棗銆掑锝呬壕濡ょ姷鍋涢ˇ鐢稿极瀹ュ绀嬫い鎺嗗亾閹兼潙锕铏圭矙閹稿孩鎷辨繝銏n潐濞茬喎鐣烽幋锕€绠婚柟棰佺劍閸嶇敻姊洪幐搴g畵闁瑰啿绉电粩鐔煎即閻愨晜鏂€闂佺粯锚閻忔岸寮抽埡鍛厱閻庯綆鍓欐禒杈┾偓瑙勬礀缂嶅﹪銆佸☉銏″€烽柟缁樺笧閳ь剦鍙冮幃宄扳堪閸涱収鏆柣銏╁灡椤ㄥ﹤鐣烽幇鏉块敜婵°倓鑳堕崢鍗烆渻閵堝骸骞楅柛銊ョ仛缁傚秹寮介‖锛勬嚀楗即宕熼鐘靛帨闂備礁鎼惉濂稿窗閺嵮呮殾妞ゆ劧绠戠粈瀣亜閹烘埈妲规い銉到閳规垿鎮欓懠顒佹喖缂備緡鍠楅幐鍓у垝婵犳艾鍐€鐟滄粌岣块弽褉鏀介柣妯虹枃婢规﹢鏌i幇顒婂姛闁硅尙枪楗即宕楅崜褍鏋涢柛鈹惧亾濡炪倖甯掔€氼參鍩涢幋锔界厱婵犻潧妫楅顒併亜椤愵剛鐣甸柡灞剧洴瀵噣鍩€椤掑嫬鍨傞柛褎顨堝畵渚€鏌涢幇闈涙灈閸ュ瓨绻濋姀锝嗙【闁挎洩绠撻弫宥呪堪閸愶絾鏂€闂佺粯鍔栧ḿ娆撴倶閿曞倹鐓ラ柡鍥殕濞呭棝鎮楅棃娑栧仮闁轰焦鎹囬弫鎾绘晸閿燂拷
  • 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柣鎴eГ閸ゅ嫰鏌ら崫銉︽毄濞寸姵姘ㄧ槐鎾诲磼濞嗘帒鍘$紓渚囧櫘閸ㄨ泛鐣疯ぐ鎺戠濞达絿鎳撴惔濠傗攽閻愭潙鐏﹂柣鐔濆懎濮柍褜鍓熷铏圭矙濞嗘儳鍓垫繝娈垮枔閸婃繈骞嗛崟顖f晬闁绘劕寮堕悗顒勬⒑閻熸澘鈷旂紒顕呭灦瀵煡骞栨担鍦弳闂佺粯娲栭崐鍦偓姘炬嫹
    MYSQL婵犵數濮烽弫鍛婃叏閻戣棄鏋侀柛娑橈攻閸欏繐霉閸忓吋缍戦柛銊ュ€块弻锝夊箻瀹曞洤鍝洪梺鍝勵儐閻楁鎹㈠☉銏犵闁绘劏鏅滈敍鍫濃攽閻愬弶鈻曞ù婊勭箞瀵煡骞撻幒婵堝數闁荤姾娅g亸銊ξ涘鑸电厱闁冲搫鍟禒杈ㄦ叏婵犲啯銇濇俊顐㈠暙閳藉顫濋澶嬫瘒闂傚倷鑳堕幊鎾诲床閺屻儺鏁勫璺猴功閺嗭附銇勯弽顐粶鐎瑰憡绻堥幃妤€鈽夊▎瀣窗闂佸憡锕╂禍婵堟崲濠靛顫呴柨婵嗘閵嗘劙姊虹紒姗嗘當婵☆偅绻傞悾宄扳攽閸♀晜鍍甸梺鐟板悁缁€浣圭妤e啯鈷掗柛顐ゅ枔閳藉绱掗妸銉吋闁哄瞼鍠栧畷娆撳Χ閸℃浼�
    SQL闂傚倸鍊搁崐鎼佸磹瀹勬噴褰掑炊椤掑鏅悷婊冪Ч濠€渚€姊虹紒妯虹伇婵☆偄瀚板鍛婄瑹閳ь剟寮婚悢鍏尖拻閻庨潧澹婂Σ顕€姊虹粙鑳潶闁告柨閰i獮澶愬箹娴e憡顥濋柣鐘充航閸斿秴鈻撴ィ鍐┾拺婵懓娲ら悘鈺侇熆閻熷府韬€殿噮鍋婂畷鍫曨敆娴e搫骞楁繝娈垮枟椤ㄥ懎螞濡や胶顩叉繝濠傚幘閻熸壋鍫柛顐犲灮閺嗩偊姊洪崫鍕効缂傚秳鐒﹂幈銊╁焵椤掑嫭鐓忛柛顐g箖椤ョ偤姊哄▎鎯у籍闁哄矉缍佹慨鈧柍杞拌兌娴犫晠姊虹紒妯煎ⅹ闁靛牏枪椤曪絿鎷犲ù瀣潔濠碘槅鍨堕弨閬嶆倵鐠囨祴鏀介柣鎰级椤ョ偤鏌涢弮鈧ú鐔笺€侀弮鍫熸櫢闁跨噦鎷�
    MYSQL闂傚倸鍊搁崐鎼佸磹瀹勬噴褰掑炊椤掑鏅悷婊冪Ч閿濈偛鈹戠€n偅娅囬梺绋跨焿婵″洨绮欒箛鏃傜瘈闁靛骏绲剧涵楣冩煠濞茶鐏︾€殿喗鎮傚畷濂稿煑閳轰椒澹曞Δ鐘靛仜閻忔繈宕濆鑸电厵鐎瑰嫰鍋婇崕蹇涙煏閸℃ê绗氱紒缁樼箓椤繈顢橀悩鎻掔疄闂備浇顕х换鎺楀磻濞戞瑦娅犲ù鐘差儏閻撯€愁熆鐠鸿櫣鐏辩痪鎯с偢閺屾盯骞橀懠顒夋М婵炲濞€娴滃爼寮婚敍鍕勃闁告挆鍕灡濠电姷顣槐鏇㈠礂濮椻偓閵嗕礁鈽夊Ο宄扮墯闂佸憡渚楅崰妤咁敊韫囨稒鈷掗柛灞剧懄缁佺増淇婂鐓庡婵炲棎鍨芥俊鑸靛緞婵犲嫷鍞甸梻浣芥硶閸o箓骞忛敓锟�
    闂傚倸鍊搁崐鎼佸磹閹间礁纾归柣鎴eГ閸ゅ嫰鏌ら崫銉︽毄濞寸姵姘ㄧ槐鎾诲磼濞嗘帒鍘$紓渚囧櫘閸ㄨ泛鐣疯ぐ鎺戠濞达絿鎳撴惔濠傗攽閻愭潙鐏﹂柣鐔濆懎濮柍褜鍓熷铏圭矙濞嗘儳鍓垫繝娈垮枔閸婃繈骞嗛崟顖f晬闁绘劕寮堕悗顒勬⒑閻熸澘鈷旂紒顕呭灦瀵煡骞栨担鍦弳闂佺粯娲栭崐鍦偓姘炬嫹
    闂傚倸鍊搁崐鎼佸磹閹间礁纾瑰瀣捣閻棗銆掑锝呬壕濡ょ姷鍋為悧鐘汇€侀弴銏℃櫆闁芥ê顦純鏇㈡⒒娴h櫣銆婇柛鎾寸箞閹柉顦归柟顖氱焸楠炴ḿ绱掑Ο琛″亾閸偆绠鹃柟瀵稿剱娴煎棝鏌熸潏鍓х暠闁活厽顨婇悡顐﹀炊閵娧€濮囬梺缁樻尵閸犳牠寮婚敓鐘茬闁靛ǹ鍎崑鎾诲传閵夛附娈伴梺鍓插亝濞叉﹢鍩涢幒妤佺厱閻忕偠顕ч埀顒佹礋閹﹢鏁冮崒娑氬幐闁诲繒鍋熼崑鎾剁矆閸愵亞纾肩紓浣贯缚濞插鈧娲栫紞濠囥€佸▎鎾村亗妤犵儐鍠撻崐鏍崲濠靛牆鏋堟俊顖氭惈閳峰姊虹紒妯诲皑闁逞屽墰缁烩偓缂傚倹姘ㄩ幉鎼佸棘閸柭も偓鍨€掑锝呬壕濠殿喖锕ㄥ▍锝囨閹烘嚦鐔煎即閻旈浠肩紓渚囧枛閿曨亪鐛鈧、娆撴嚃閳哄骞㈤梻鍌欒兌閹虫挻鏅堕悾灞藉灊妞ゆ牜鍋涚壕濠氭煕閺囥劌骞樼痪鎹愭闇夐柨婵嗘媼濞肩姵銇勮箛鎾跺⒈闁轰礁鍊块弻宥嗘姜閹峰矈鍞归梺琛″亾濞寸姴顑嗛悡鐔兼煙闁箑澧柍缁樻礋閺屾盯濡堕崶褎鐎婚梺瀹狀潐閸ㄥ潡銆佸☉妯锋婵炲棗绻愰弨顓熶繆閵堝洤啸闁稿绋撻幑銏狀潨閳ь剙顕i锕€绠荤紓浣股戝▍銏ゆ⒑鐠恒劌娅愰柟鍑ゆ嫹
    闂傚倸鍊搁崐鎼佸磹閹间礁纾归柣鎴eГ閸ゅ嫰鏌涢锝嗙闁稿被鍔庨幉鎼佸籍閸惊銉╂煕閹般劍娅嗛柛搴e枛閺屾洝绠涚€n亞鍔村┑鐐跺皺鏋柍瑙勫灴閹晝鎷犺娴兼劙鏌f惔銏犲毈闁告瑥鍟悾鐑芥晲閸垻鏉稿┑鐐村灦閻熝囧储閹剧粯鈷戦柛娑橈功缁犳捇鎮楀鐓庡⒋闁糕斁鍋撳銈嗗坊閸嬫捇鏌熼懞銉х煀闁宠閰f慨鈧柕鍫濇閳ь剛鍏橀弻锝夊箣閻愩劎绱伴梺鍛婏耿娴滆泛顫忓ú顏咁棃婵炴垼椴搁埢鎾绘⒑閹肩偛濡藉┑鐐诧躬楠炲啯銈i崘鈺冨姸閻庡箍鍎卞Λ娑㈠储閸涘﹦绠鹃弶鍫濆⒔閸掔増绻濋埀顒勬焼瀹ュ棗鍓归梺鍦劋椤ㄥ棝鎮″☉銏″€堕柣鎰邦杺閸ゆ瑥鈹戦垾鐐藉仮闁哄苯绉归幐濠冨緞濡亶锕傛煣娴兼瑧绉柡灞剧洴閳ワ箓骞嬪┑鍥╁蒋濠电偛顕崢褔宕弶鎴綎缂備焦蓱婵潙顪冪€n亞鍑归悷鏇炴缁辨捇宕掑姣欙繝鏌ら崘鎻掝暢闁告帗甯楃换婵嗩潩椤掆偓閸炪劑鎮峰⿰鍕煉鐎规洜鏁诲鎾偄缂堢姷鐩庨梻浣告惈閸燁偊宕愰崨濠勵洸闁告挆鈧崑鎾舵喆閸曨剛顦ュ銈忓瘜閸ㄨ埖淇婇幘顔肩闁规惌鍘介崓鐢告⒑缂佹ɑ灏繛鎾敱缁傛帡顢橀姀锛勫幐閻庡箍鍎扮拋鏌ュ磻閹捐妫橀柕澶涢檮閺夋悂姊绘担铏瑰笡闁告梹娲栬灒濠电姴娲ら崥褰掓煟閺傝法娈遍柡鈧懞銉d簻闁哄秲鍔庨埊鏇㈡倶韫囥儵妾い銊e劦閹瑩鎳犻鍌ゅ晪闂備浇妗ㄩ悞锕傚箲閸ヮ剙鏋侀柟鍓х帛閺呮悂鏌ㄩ悤鍌涘
    闂傚倸鍊搁崐鎼佸磹瀹勬噴褰掑炊瑜忛弳锕傛煕椤垵浜濋柛娆忕箳閳ь剝顫夊ú鏍洪敂钘夊灁濠靛倸鎲¢悡娑㈡倶閻愰鍤欓柛鏃€宀搁弻锝夊Χ閸パ傚缂備胶绮惄顖氱暦閸楃倣鐔兼惞闁稒鍋呯紓鍌氬€风拋鏌ュ磻閹炬枼鏀介柣妯诲絻閺嗙偤鏌涘▎蹇曠濞e洤锕幃娆愶紣濠靛棙顔勫┑鐐茬摠缁挾绮婚弽褜娼栭柧蹇氼潐鐎氭岸鏌嶉妷銉э紞濞寸姭鏅犲娲传閵夈儲鐎惧┑鐐插悑閻熲晠骞冩ィ鍐╁€婚柤鎭掑劚娴滄粎绱掗悙顒€顎滃瀛樻倐瀵煡濮€閿涘嫮顔曢柡澶婄墕婢х晫绮旈浣典簻闁哄洨鍠撴晶鐢碘偓瑙勬处閸ㄥ爼宕洪埀顒併亜閹烘垵顏柍閿嬪浮閺屾稓浠﹂崜褎鍣梺绋跨箰閺堫剟濡甸崟顖氼潊闁绘瑥鎳撻崥顐㈩渻閵堝啫鐏€光偓缁嬫鍤曞ù鐘差儛閺佸洭鏌i幇顔芥毄鐎规洝鍩栫换婵嗩嚗闁垮绶查柍褜鍓氶崝娆忕暦閹达箑绠绘繛锝庡厸缁ㄥ姊虹€圭姵銆冮梻鍕Ч瀹曟垿濮€閳垛晛浜鹃悷娆忓缁€鈧梺闈涚墛閹倿鐛崘顔碱潊闁靛繆鈧厖绮ч梻浣规灱閺呮盯宕悧鍫㈩洸婵炲棙鎸婚埛鎴︽偣閸ャ劎鍙€妞ゅ孩顨堢槐鎺楁偐閼碱儷褏鈧娲樺ú妯横缚韫囨稑鐓橀柟顖嗗倸顥氭繝娈垮枟宀e潡宕㈣閻涱喖螖閸愵亞锛滈柣搴秵娴滆泛螣閳ь剚绻濆▓鍨灀闁稿鎹囧铏圭磼濡吋鍠涢梺绋款儐閹瑰洭寮婚敐澶婃闁圭ǹ瀵掑Λ锕傛⒑鐠団€虫灕妞ゎ偄顦甸獮蹇涘川椤栨粓鈹忛柣搴秵閸嬪棛绮旈悜鑺モ拺閻犲洦褰冮銏ゆ煟閺冩垵澧存鐐茬箻閺佹捇鏁撻敓锟�

    开发者狂喜!Meta最新发布的LLM Compiler,77%的自动调优效率-人工智能

    首页 2024-07-01 22:11:37

    Meta做了一个非常好的LLMM Compiler,帮助程序员更有效地编写代码。

    昨天,三大 AI 巨头 OpenAI、Google、Meta 发布自己大模型的最新研究成果 ——

    OpenAI 推出基于 GPT-4 专门寻找训练 bug 的新模型 CriticGPT,谷歌开源 9B、27B 版 Gemma2,而且 Meta 人工智能的最新突破 ——LLM Compiler。

    这是一个强大的开源模型,旨在优化代码,彻底改变编译设计。这一创新可能会改变开发者处理代码优化的方式,使其更快、更高效、更经济。
    据悉,该 LLM Compiler 实现自动调优搜索的优化潜力 77%的结果可以显著减少编译时间,提高各种应用程序的代码效率。在反汇编方面,往返反汇编的成功率为 45%。

    有网友表示,这就像是代码优化和反汇编的游戏规则变化者。
    这对开发者来说是个不可思议的好消息。
    概述

    大语言模型在许多软件工程和编程任务中表现出了出色的能力,但它们在代码优化和编译器领域的应用尚未得到充分挖掘。训练这些 LLMs 包括昂贵的计算资源在内的大量计算资源需要消耗 GPU 时间和巨大的数据集往往使许多研究和项目不可持续。

    为弥补这一空白,Meta 介绍了一个研究团队 LLM Compiler,专门优化代码,彻底改变编译设计。通过包含 5460 亿个标记的 LLVM-IR 以及汇编代码的庞大语料库上的训练模型,使模型能够理解编译器中间的表达、汇编语言和优化技术。
    论文链接:https://ai.meta.com/research/publications/meta-large-language-model-compiler-foundation-models-of-compiler-optimization/

    研究人员在他们的论文中解释说:「LLM Compiler 增强了对编译器中间的表达(IR)、了解汇编语言和优化技术。」这种增强的理解使模型能够执行以前仅限于人类专家或专业工具的任务。

    LLM Compiler 训练过程如图所示 1 所示。
    LLM Compiler 在代码大小优化方面取得了显著成果。在测试中,模型的优化潜力实现了自动调优搜索 77%的结果可以显著减少编译时间,提高各种应用程序的代码效率。

    该模型具有更好的反汇编能力。LLM Compiler 在将 x86_64 和 ARM 汇编代码转换回 LLVM-IR 往返反汇编的成功率为 45%(其中 14% 完全匹配)。这种能力可能对逆向工程任务和旧代码维护具有不可估量的价值。

    项目的核心贡献者之一 Chris Cummins 强调该技术的潜在影响:「通过提供两种大小的预训练模型(7 亿和 13 1亿参数)并通过微调版本显示其有效性,」他说,「LLM Compiler 为探索 LLM 在代码和编译器优化领域未开发的潜力铺平了道路。」

    用于编译器优化 Code Llama

    汇编代码和编译器 IR 在上面进行预训练

    训练编程 LLMs 数据通常主要由图像组成 Python 汇编代码在这些数据集中的比例很小,由这种高级源语言组成的编译器 IR 比例较小。

    为了建立一个很好的理解这些语言的人 LLM,研究团队用 Code Llama 权重初始化 LLM Compiler 模型,然后在以编译器为中心的数据集上进行训练 4010 亿个 token,该数据集主要由汇编代码和编译器组成 IR 组成,如表 1 所示。
    数据集 LLM Compiler 主要在由 LLVM(版本 17.0.6)生成的编译器在中间表示和汇编代码上进行训练,这些数据来源于训练 Code Llama 同一数据集已在表中 2 对数据集进行了总结。和 Code Llama 同样,我们还可以从自然语言数据中获得少量的训练批次。
    微调编译器模拟指令
    ?
    为了理解代码优化的机制,研究团队对 LLM Compiler 通过模拟编译器优化模型进行微调指令,如图所示 2 所示。
    它的想法是通过随机生成的编译器优化序列,从有限的未优化种子程序集合中生成大量的例子。然后他们训练模型预测优化生成的代码,并在应用程序优化后预测代码大小。

    任务规范。给定未经优化的 LLVM-IR(由 clang 前端输出),一个优化过程列表,一个起始代码大小,生成这些优化后的结果代码和代码大小。

    有两种类型的任务:在第一种中,模型预期输出编译器 IR;在第二种中,模型预期输出汇编代码。输入两种类型 IR、优化过程与代码大小相同,提示决定了所需的输出格式。

    代码大小。它们用两个指标来衡量代码的大小:IR 指令数和二进制大小。二进制大小将通过 IR 或者汇编降级为目标文件后,.TEXT 和 .DATA 计算段大小的总和。我们排除了 .BSS 段落,因为它不会影响磁盘的大小。

    优化 pass。在这项工作中,研究团队针对 LLVM 17.0.6.使用新的过程管理器 (PM, 2021),它将 pass 模块、函数、循环等不同级别的分类,以及转换和分析 pass 。转换 pass 改变给定的输入 IR,而分析 pass 产生影响后续转换的信息。
    ?
    在 opt 的 346 个可能的 pass 他们选择了参数 167 每次使用。这包括每条默认优化流水线。 (例如 module (default)),单独优化转换 pass (例如 module (constmerge)),但排除了非优化实用程序 pass (例如 module (dot-callgraph)) 以及不保留语义的转换 pass (例如 module (internalize))。

    他们排除了分析 pass,由于它们没有副作用,我们依赖它们 pass 管理器根据需要注入依赖性分析 pass。接受参数 pass,我们使用默认值 (例如 module (licm))。表 9 包含所有使用 pass 列表。我们使用 LLVM 的 opt 工具应用 pass 并使用列表 clang 将结果 IR 降级为目标文件。清单 1 使用命令显示。
    数据集。通过对表,研究团队 2 总结的未优化程序应用 1 到 50 个随机优化 pass 列表生成编译器模拟数据集。 pass 列表长度均匀随机选择。pass 从上述情况来看,列表是通过的 167 个 pass 集合均匀采样生成。导致编译器崩溃或在 120 秒后超时的 pass 排除列表。

    LLM Compiler FTD :扩展下游编译任务?

    微调优化标志调优指令

    操作编译标志对操作性能和代码大小都有显著影响。研究团队训练 LLM Compiler FTD 模型执行下游任务,即为 LLVM 的 IR 优化工具 opt 选择生成最小代码大小的标志。

    标志调整的机器学习方法以前表现出良好的效果,但在不同程序之间的泛化方面存在困难。以前的工作通常需要编译几十或几百个新程序来尝试不同的配置,并找到最好的性能选项。研究小组通过预测标志来最小化未见程序的代码大小,并在任务的零样本版本上进行培训和评估 LLM Compiler FTD 模型。

    他们的方法不依赖于所选择的编译器和优化指标,他们计划在未来运行。目前,优化代码的大小简化了培训数据的收集。

    任务规范。研究团队向前发展。 LLM Compiler FTD 模型呈现未优化的模型 LLVM-IR (由 clang 前端生成),并要求其生成应用程序 opt 如果不能改进输入代码,标志列表,这些优化应用前后的二进制大小和输出代码,将生成一个简短的输出信息,只包括未优化二进制大小。

    他们使用和编译相同的受限优化器模拟任务 pass 二进制大小采用相同的方式计算。

    图 3 解释了生成训练数据的过程以及如何在推理中使用模型。
    只需要在评估过程中生成 pass 从模型输出中提取列表。 pass 列表,并使用给定的参数运行 opt。然后,研究人员可以评估模型预测的二进制尺寸和优化输出代码的准确性,但这些都是辅助学习任务,不需要使用。

    正确性。LLVM 优化器并非无懈可击,以意外或未经测试的顺序运行优化 pass 它可能会暴露出微妙的正确性错误,从而降低模型的实用性。研究团队开发了这一风险,以缓解这一风险 PassListEval,这是帮助自动识别破坏程序语义或导致编译器崩溃的工具 pass 列表。图 4 显示工具的概览。
    PassListEval 接受候选 pass 列表作为输入,并在一个中包含 164 个自测试 C 这些程序从程序的套件中进行评估 HumanEval-X。每个程序都包含一个编程挑战的参考解决方案,例如「检查两个数字之间的距离是否小于给定阈值」,单元测试套件验证了正确性。他们将候选 pass 列表应用于参考解决方案,然后将其与测试套件链接,以生成二进制文件。在执行过程中,如果任何测试失败,二进制文件将崩溃。如果任何二进制崩溃或任何编译器调用失败,我们将拒绝候选人 pass 列表。

    数据集。这个团队来自一个 450 万个未优化 IR 训练了标志调优示例数据集 LLM Compiler FTD 模型,这些 IR 用于预训练。最好生成每个程序 pass 例如,他们进行了广泛的迭代编译过程,如图所示 3 所示。

    1. 研究团队使用大规模随机搜索生成最佳程序候选人 pass 列表。他们最多独立生成每个程序 50 个 pass 从之前描述的随机列表开始 167 个可搜索 pass 采样均匀集中。每次他们评估一个程序时,他们都会评估一个程序 pass 在列表中,记录生成的二进制大小,然后选择生成最小二进制大小的每个程序 pass 列表。他们运行了 220 独立编译1亿次,平均每个程序 4,877 次。

    2. 生成的随机搜索 pass 列表可能包含冗余 pass,这些 pass 对最终结果没有影响。另外,有些 pass 顺序是可交换的,重新排序不会影响最终结果。他们开发了一个最小化的过程,并将其应用于每个过程中,因为这些噪声将在训练数据中引入 pass 列表。

    最小化包括三个步骤:冗余 pass 消除、冒泡排序和插入搜索。在冗余 pass 在消除过程中,他们通过迭代删除单个 pass 最好是最小化 pass 列表,看它们是否对二进制有贡献,如果没有,就丢弃它们。重复这个过程,直到你不能再放弃它 pass。然后试着对冒泡进行排序 pass 根据关键字对子序列提供统一的排序 pass 进行排序。最后,通过遍历插入排序 pass 列表中的每一个 pass 并尝试在它之前插入 167 个搜索 pass 每个人都来执行局部搜索。如果这样做改善了二进制的大小,就保留这个新的 pass 列表。在达到固定点之前,将整个管道循环最小化。最小化后的 pass 列表长度分布如图所示 9 所示。平均 pass 列表长度为 3.84。

    3. 他们以前描述过 PassListEval 最适合候选人使用 pass 列表。这样,他们就确定了 1,704,443 个独立 pass 列表中的 167,971 个 (9.85%) 编译或操作时会出现错误

    4. 他们将 100 最常见的最优 pass 列表广播到所有程序,如果发现改进,每个程序的最佳更新 pass 列表。之后,唯一最好的 pass 列表总数从 1,536,472 减少到 581,076。

    与上述自动调优管道相比 -Oz 产生了 7.1% 减少了几何平均二进制大小。图 10 显示了单个 pass 的频率。对他们来说,这种自动调优是每个程序优化的黄金标准。虽然发现的二进制节省了显著的规模,但这需要 280 超过1亿次额外编译的计算成本 21,000 个 CPU 天。对 LLM Compiler FTD 指令微调执行标志调优任务的目的是在不运行编译器数千次的情况下,实现自动调优器性能的一部分。

    ?微调反汇编指令

    将代码从汇编语言提升到更高层次的结构,可以进行额外的优化,如直接集成到应用程序代码中的库代码,或将剩余代码移植到新架构。将机器学习技术应用于二进制可执行文件生成可读、准确的代码,在反编译领域取得了进展。在本研究中,研究团队展示了它 LLM Compiler FTD 如何通过微调反汇编,学习汇编代码和编译 IR 之间的关系。任务是学习 clang -xir - -o - -S 逆向翻译如图所示 5 所示。
    往返测试。使用 LLM 反汇编会导致正确性问题。升级代码必须通过等价检查器验证,这并不总是可行的,或者需要手动验证正确性,或者通过充分的测试用例获得信心。然而,正确性的下限可以通过往返测试找到。也就是说,通过提升 IR 重新编译成汇编代码。如果汇编代码相同,则 IR 是正确的。这为使用 LLM 结果提供了一种简单的方法,并且是衡量反汇编模型效用的一种简单方法。

    任务规范。研究团队向模型提供汇编代码,并训练它发出相应的反汇编 IR。本任务的上下文长度设置为输入汇编码 8k 个 token 和输出 IR8k 个 token。

    数据集。他们从以前任务中使用的数据集中衍生汇编代码和 IR 是的。他们的微调数据集包括 470 输入一万个样本 IR 在降低到 x86 汇编以前已经使用过 - Oz 优化。

    训练参数?

    编码通过字节标记数据,使用和使用 Code Llama、Llama 和 Llama 2 相同的标记器。他们在所有四个训练阶段使用相同的训练参数。他们使用的大部分训练参数和 Code Llama 使用相同的基础模型 AdamW 优化器,β1 和 β2 的值为 0.9 和 0.95。他们使用余弦调度,预热步骤是 1000 步骤,将最终学习率设定为峰值学习率 1/30。

    与 Code Llama 与基本模型相比,团队将单个序列的上下文长度从 4096 增加到 16384,但批量尺寸保持恒定 400 万个 token。为了适应更长的上下文,他们将学习率设置为 2e-5,并进行了修改?RoPE 嵌入位置的参数将频率重置为基本值 θ=10^6。这些设置与 Code Llama 基本模型的长上下文训练是一致的。

    ?评估
    ?
    对研究团队进行评估 LLM Compiler 模型在标志调优和反汇编任务中,编译器模拟 token 软件工程任务的预测和性能。
    ?
    标志调优任务
    ?
    方法。他们评估 LLM Compiler FTD 在未见程序的优化标志调优任务中的表现与 GPT-4 Turbo 和 Code Llama - Instruct 进行比较。从模型输出中提取和优化每个模型的运行推理 pass 然后他们使用这个列表 pass 列表优化特定程序,记录二进制大小,使用基线 -Oz 优化程序的二进制大小。
    ?
    对于 GPT-4 Turbo 和 Code Llama - Instruct,他们在提示后添加一个后缀,提供额外的上下文来进一步描述问题和预期的输出格式。
    ?
    生成的所有模型 pass 列表都使用 PassListEval 验证失败的,使用验证 -Oz 作为替代品。进一步验证模型生成 pass 列表的正确性,他们链接最终程序二进制文件,并保守地输出和使用它们 -O2 差分测试优化管道优化的基准输出。
    ?
    数据集。研究团队使用从 MiBench 提取基准套件 2,398 评估测试提示。为了生成这些提示,它们被构成 24 个 MiBench 基准的所有 713 每个翻译单元,从每个单元生成未优化的翻译单元 IR,然后将它们格式化为提示。如果生成的提示超过 15k tokens,他们使用 llvm-extract 将代表翻译单元 LLVM 模块分成较小的模块,每个函数一个,导致模块分成较小的模块 1,985 个提示适合 15k token 上下文窗口,剩下的 443 不适合翻译单元。在计算性能分数时,它们是对的 443 使用排除的翻译单元使用被排除的翻译单元 -Oz。表 10 总结基准。
    结果。表 3 显示了标志调优任务中所有模型的零样本性能。只有 LLM Compiler FTD 模型比 -Oz 改进,13B 参数模型略优于较小模型,在 61% 在生成比的情况下 -Oz 目标文件较小。
    在某些情况下,模型生成 pass 列表导致比 -Oz 目标文件大小较大。例如,LLM Compiler FTD 13B 在 12% 在退化的情况下。这些退化可以通过简单的编译程序避免两次:一次使用模型生成 pass 列表,一次使用 -Oz,然后选择产生最佳结果 pass 列表。相对于消除 -Oz 退化,这些 -Oz 备份分数将 LLM Compiler FTD 13B 相对于 -Oz 总体改进提高到 5.26%,并使 Code Llama - Instruct 和 GPT-4 Turbo 相对于 -Oz 适度改进。图片 6 在每个基准上显示每个模型的性能细分。
    ?二进制尺寸的准确性。虽然模型生成的二进制尺寸预测对实际编译没有影响,但研究团队可以在预测优化前后评估模型二进制尺寸的性能,以了解每个模型对优化的理解。图 7 显示结果。
    LLM Compiler FTD 二进制大小预测与实际情况密切相关,7B 对于未经优化和优化的二进制模型,参数模型的大小分别达到 0.083 和 0.225 的 MAPE 值。13B 参数模型的 MAPE 值相似,分别为 0.082 和 0.225。Code Llama - Instruct 和 GPT-4 Turbo 二进制大小预测与实际情况几乎无关。研究人员注意到,LLM Compiler FTD 优化代码的错误略高于未优化代码。特别是 LLM Compiler FTD 偶尔会出现高估优化效果的趋势,导致预测二进制低于实际情况。
    SEO闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁惧墽鎳撻—鍐偓锝庝簼閹癸綁鏌i鐐搭棞闂囧鏌ㄥ┑鍡欏妞ゅ繒濮风槐鎺楀焵椤掍胶绡€闁稿本顨嗛弬鈧梻浣虹帛钃辩憸鏉垮暣閸┾偓妞ゆ巻鍋撴い鏇ㄥ幘濡叉劙骞橀幇浣瑰兊闁哄鐗勯崝宀勫几閹达附顥婃い鎰╁灪婢跺嫭绻涢崣澶涜€块柨婵堝仱瀵挳濮€閿涘嫬骞楅梻浣哥秺閸嬪﹪宕滈敃鍌氬惞闁绘棁娅g壕濂告煃闁款垰浜鹃梺绋款儐閹瑰洤顫忕紒妯诲閻熸瑥瀚禒鈺呮⒑缁嬪灝顒㈢紒顔芥尭閻g兘宕奸弴妞诲亾閿曞倸绠抽柡鍐ㄦ搐閻撴ɑ绻濋悽闈浶ラ柡浣告啞閹便劑鎮滈挊澶嬬€梺褰掓?缁€浣哄缂佹ḿ绠鹃柟瀵稿剱閻掓悂鏌i弬鎸庢喐缂佲檧鍋撻梻浣告啞閸旓附绂嶇捄濂借櫣绮欐惔鎾存杸闂佺粯枪椤曟粌顔忛妷鈺傜厽婵°倐鍋撻柨鏇畵閸┾偓妞ゆ帊娴囨竟姗€鏌熼搹顐€跨€殿喖顭烽弫鎰緞婵犲喚妫熼梻浣稿閻撳牓宕板Δ鍛9妞ゆ牜鍋為埛鎴犵磽娴h偂鎴犱焊椤忓牊鐓曢幖杈剧稻閺嗩剛鈧鍠栭…鐑藉极閹邦厼绶炲┑鐘插€哥粊顕€姊绘担铏瑰笡闁告梹鐗滅划濠囧箻椤旇偐锛涢梺瑙勫礃椤曆囧箲閼哥偣浜滈柟鎯ь嚟閳藉霉濠婂懎浜鹃柟渚垮妼铻i柣鎾崇凹婢规洟鏌f惔銏㈠暡闁瑰嚖鎷�
    闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁惧墽鎳撻—鍐偓锝庝簼閹癸綁鏌i鐐搭棞闁靛棙甯掗~婵嬫晲閸涱剙顥氬┑掳鍊楁慨鐑藉磻閻愮儤鍋嬮柣妯荤湽閳ь兛绶氬鎾閳╁啯鐝曢梻浣藉Г閿氭い锔诲枤缁辨棃寮撮姀鈾€鎷绘繛杈剧秬濞咃綁濡存繝鍥ㄧ厱闁规儳顕粻鐐烘煙椤旂偓鐒挎い锕€缍婇弻鐔碱敍濮樿京鍔Δ鐘靛仦宀h法妲愰幒鎳崇喓鎮伴垾鍏呭闂佸壊鐓堥崑鍡欑不妤e啯鐓欓悗鐢登归崜鍗灻归悡搴㈩棦闁哄瞼鍠愬ḿ蹇涘礈瑜忛弳鐘绘⒑濞茶骞楁い銊ワ躬閹繝顢曢敃鈧悙濠囨煏婵炑€鍋撳┑顔兼喘濮婅櫣绱掑Ο璇叉殫闂佸摜濮甸悧鐘差嚕婵犳碍鏅搁柣妯垮皺椤︺劑姊洪棃娴ㄥ綊宕曢鈧畷鎴﹀箻鐠囪弓绱堕梺闈涱檧闂勫嫬鈻撴导瀛樷拺闁告挻褰冩禍婵囩箾閸欏鑰块柛鈺傜洴楠炴帒螖娴e搫骞堥梺璇茬箳閸嬬娀顢氳閸┾偓妞ゆ帊鐒︾粈瀣煙椤旀枻鑰块柡浣稿暣瀹曟帒鈽夊顒€绠伴梻浣筋嚙缁绘帡宕戦悢鐓庣;闁规儳澧庨惌鍡涙煕閹板吀绨界痪鎹愬亹缁辨挻鎷呯拹顖滅窗濡炪値鍓欓崥瀣Φ閸曨垱鏅滈柣锝呰嫰瀵劑姊洪崫鍕効缂佺粯绻傞悾閿嬬附閸撳弶鏅濋梺闈涚箳婵參骞忛锔界厽閹兼番鍊ゅḿ鎰箾閸欏鐭嬬紒缁樼洴閸┾偓妞ゆ帒瀚悡娆愩亜閺冨浂娼愭繛鍛川缁辨帗娼忛妸銉х懆闁句紮缍佸娲垂椤曞懎鍓板銈呯箳閹虫捇鍩為幋锔藉亹闁割煈鍋呭В鍕⒑缁嬫鍎戝┑顕€鏀辩粋宥囩矙鎼存挻鐎婚梺鐟扮摠缁诲倿鎮樻繝鍌ゆ富闁靛牆妫涙晶顒傜磼椤旇偐效妞ゃ垺娲熼幊鐐哄Ψ瑜忛鏇㈡⒑閻熸壆鎽犻柣鐔村劦閹﹢顢旈崼鐔哄幗闂佽鍎抽顓㈠箠閸ヮ剚鐓涢悘鐐插⒔濞插瓨顨ラ悙宸剰闁宠姘︾粻娑欑節閸屾瑥顥氶梻浣告惈缁嬩線宕戦埀顒勬煕鐎n偅灏い顐g箞閹瑩顢楅埀顒勵敂閿燂拷
    闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾剧懓顪冪€n亝鎹i柣顓炴閵嗘帒顫濋敐鍛婵°倗濮烽崑鐐烘偋閻樻眹鈧線寮村杈┬㈤梻浣规偠閸庢椽宕滈敃鍌氭瀬闁告劦鍠楅悡銉╂煛閸ヮ煈娈斿ù婊堢畺濮婂搫效閸パ€鍋撳Δ鍛;闁规崘鍩栧畷鍙夌節闂堟稒宸濈紒鈾€鍋撻梻浣呵归張顒傜矙閹存績鏋嶉柨婵嗩槹閳锋垿鏌熼懖鈺佷粶濠碉紕鏅槐鎺旀嫚閼碱剙鈪甸梺缁樹緱閸o絽顕f禒瀣р偓鏍Ψ閵夆晛寮板銈冨灪椤ㄥ﹪宕洪埀顒併亜閹哄秵顦风紒璇叉閳规垿宕掑顓炴殘闂佺粯鎸鹃崰鏍蓟閻旂厧绠氱憸婊堝吹閻旇櫣纾奸柣妯挎珪瀹曞矂鏌$仦鐣屝ら柟鍙夋尦瀹曠喖顢曢妶鍕闂佽姘﹂~澶娒哄Ο鍏兼殰闁圭儤顨呴悡姗€鏌涢幇闈涙灈缂佺姴顭烽弻褑绠涢敐鍛嚱缂佺虎鍘搁崑鎾绘⒒閸屾瑧绐旈柍褜鍓涢崑娑㈡嚐椤栨稒娅犳い鏍仦閻撶姷鎲搁悧鍫濈闁伙絾妞介幐濠傗攽鐎n偀鎷哄銈嗗坊閸嬫挾绱掓径瀣唉闁诡喚鍋ゅ畷褰掝敃閻樿京鐩庨梻浣烘嚀閹碱偄螞濡や胶顩查柛鎾楀懐锛濇繛杈剧到閹碱偄鐡紓鍌欑椤﹂亶骞婇幘缁樺仼闁绘垼妫勯崡鎶芥煏韫囥儳纾块柛鏂跨埣閹鐛崹顔煎闂佺娅曢崝娆撳箖閸ф鐐婃い鎺嶈兌閸樼敻姊虹粙璺ㄧ闁告艾顑夊畷鏇炍旈崨顔惧幗闂佸湱鍋撻崜姘i搹鍦<閺夊牃鏅涙禒杈┾偓娈垮枙缁瑩銆佸鈧幃銏ゅ传閸曨偄顩梻鍌氬€风粈浣圭珶婵犲洤纾婚柛娑卞灡瀹曡尙鈧箍鍎遍幉姗€鏁愰崼娑楁睏闂佸湱鍎ら幐楣冨储娴犲鈷戦悷娆忓閸斻倝鏌f幊閸斿海鍒掗崼鈶╁亾閿濆骸鏋熼柣鎾寸洴閹﹢鎮欐0婵嗘婵犵鈧偨鍋㈤柡灞界Ф閹叉挳宕熼銈勭礉闁诲氦顫夊ú鏍х暦椤掑啰浜欏┑鐐舵彧缂嶁偓妞ゆ洘鐗犲畷顒勫矗婢跺瞼鐦堥梺姹囧灲濞佳冩毄婵$偑鍊х徊鑲╁垝濞嗗繒鏆︽繝濠傚暊閺€浠嬫倵閿濆簼绨介柣锝嗘そ濮婅櫣绮欑捄銊т紘闂佺ǹ顑嗛惄顖炲箯閹达附鍋勯悶娑掆偓鍏呭濡ょ姷鍋涢悘婵嬪礉濮樿埖鐓熸俊銈勮兌閻﹥銇勯鈧敃顏呬繆閹间礁鐓涢柛灞绢殕鐎氳偐绱撻崒娆戭槮妞ゆ垵鐗嗛埢鏃堝即閻樺吀绗夐梺鑲┾拡閸撴稓澹曟總鍛婂€甸柨婵嗛娴滄粓鏌h箛鎾舵憼缂佺粯绻堥崺鈧い鎺嶈兌閻熷綊鏌嶈閸撴瑩锝炶箛鎾佹椽顢旈崟顓у晣闂備胶绮崝鏍亹閸愨晜鍙忓鑸靛姈閳锋垿鏌涘┑鍡楊仾闁革綀娅g槐鎺楊敊閼测晝鍔梺璇″櫍缁犳牠骞冨⿰鍫熷癄濠㈣泛鐬奸崢顒€鈹戦悩顔肩伇婵炲鐩幆澶嬬附閸撳弶鏅╅梺鍝勬储閸ㄦ椽鍩涢幋鐘电<妞ゆ牗绋掔粈鈧繝鈷€鍕弨闁哄被鍔岄~婵嬫嚋閻㈤潧骞楅梻濠庡亜濞层倝鏁冮妷銉㈡瀺濠电姴娲﹂悡娑氣偓鍏夊亾閻庯綆鍓涜ⅵ婵$偑鍊戦崹娲晝閵忋倕绠栭柕蹇嬪€栭崐缁樹繆椤栨粌鍔嬮柣婵撶秮濮婂宕掑▎鎴М闂佹眹鍊曞ú顓㈡晲閻愭潙绶為柟閭﹀墮閻庮參姊虹粔鍡楀娴犵娀鏌嶈閸忔稓绮堟笟鈧崺銉﹀緞婵炪垻鍠庨オ浼村礋椤掑顥堥梻浣虹《閺備線宕戦幘鎰佹富闁靛牆妫楃粭鍌炴煠閸愯尙鍩i柕鍡楁嚇閹崇娀顢楅崒婊愮闯闁诲骸绠嶉崕鍗灻洪妶澶嬪剨闁哄被鍎查埛鎺楁煕鐏炴崘澹橀柍褜鍓欓崲鏌ユ箒闂佹悶鍎洪崜锕傚极鐎n剚鍠愮€广儱顧€缂嶆牗绻濋棃娑卞剱闁哄懏绻堥弻娑樼暆鐎n亶娲紓浣割儏缁绘垹鎹㈠┑瀣潊闁挎繂鎳愰崢顐︽⒑閸涘﹥鈷愭繛鍙夌矌閸掓帗绻濆顒€鍞ㄥ銈嗘尵閸犳捇宕㈤崡鐑嗘富闁靛牆妫楁慨褏绱掗幓鎺戔挃缂侇喖鐗撻崺鈧い鎺戝€荤壕濂告煟閹伴潧澧柛鏂诲€栫换娑氫焊閺嶃倕浜鹃柟棰佺劍缂嶅骸鈹戦悙鍙夆枙濞存粌鐖煎顐﹀幢濞戞瑧鍘撻悷婊勭矒瀹曟粌鈽夊顒€鐏婇梺鍝勫暙閻楀棛绮荤紒妯镐簻闁哄啫娲﹂ˉ澶愭煕閹捐埖鍤€闁宠鍨堕獮濠囨煕婵犲啯绀嬫鐐诧龚缁犳稑鈽夊▎蹇庣暗闂備線娼чˇ顐﹀疾濠婂牊鍋傞柣鏂垮悑閻撴盯鏌涢妷銏℃珔濞寸姵绮撻弻宥堫檨闁告挻鐟ラ敃銏ゆ焼瀹ュ懐鍔﹀銈嗗笂閼冲爼宕弻銉︾厵闁告垯鍊栫€氾拷
    婵犵數濮烽弫鍛婃叏閻戣棄鏋侀柛娑橈攻閸欏繘鏌i幋锝嗩棄闁哄绶氶弻鐔兼⒒鐎靛壊妲紒鐐劤椤兘寮婚敐澶婄疀妞ゆ帊鐒﹂崕鎾绘⒑閹肩偛濡奸柛濠傛健瀵鈽夐姀鈺傛櫇闂佹寧绻傚Λ娑⑺囬妷褏纾藉ù锝呮惈灏忛梺鍛婎殕婵炲﹤顕f繝姘亜闁惧繐婀遍敍婊堟⒑闂堟稓绠冲┑顔炬暬閹﹢宕奸姀銏紲闂佺粯鍔﹂崜娆撳礉閵堝棎浜滄い鎾跺Т閸樺鈧鍠栭…鐑藉箖閵忋倖鍋傞幖杈剧秵濡插爼鏌i悢鍝ョ煀缂佺粯甯″顐︻敊鐏忔牗顫嶉梺闈涢獜缁辨洟宕㈤幘缁樷拻濞达絽鎽滄禒銏°亜閹存繃鍤囬柟顔斤耿閺佸倿宕滆閿涙粎绱撻崒娆戝妽瀹€锝呯仢鐓ら悗鐢电《閸嬫挾鎲撮崟顒傤槬閻庤娲﹂崜婵嬫倶閹烘鈷戦柛娑橈功缁犳捇鎮楀鐓庡⒉妞わ絼绮欏濠氬磼濮橆兘鍋撴搴g焼濞撴埃鍋撴鐐寸墵椤㈡洟鏁傜紒妯绘珗闂備胶纭堕崜婵堢矙閹烘纾婚柨鐔哄У閻撳啴鏌涘┑鍡楊仾闁革絽缍婇弻锕傚礃椤忓嫭鐏堥梺鍝勭焿缂嶄礁顕i鍕閹兼番鍨归弸鎴︽⒒娴h棄鍚归柛鐘叉捣缁辩偞绻濋崶褑鎽曞┑鐐村灍閹冲洭鍩€椤掑﹦鐣垫鐐差儏閳规垿宕堕埡鈧柇顖氣攽閿涘嫬浜奸柛濞垮€濆畷鎴﹀礋椤愨偓濞差亶鏁囬柕蹇曞Х閻e搫鈹戞幊閸婃劙宕戦幘缁樼厓缂備焦蓱瀹曞瞼鈧娲栫紞濠囥€佸▎鎾村仼閻忕偠鍋愰幐澶愭⒒閸屾艾鈧绮堟笟鈧獮澶愭晸閻樿尪鎽曢梺闈涒康鐎靛苯鈻撴禒瀣厵闂傚倸顕ˇ锕傛煟閹绢垪鍋撻幇浣哄數闂佸吋鎮傚ḿ褎鎱ㄩ崼銉︾厱閻庯絻鍔屾俊璺ㄧ磼鏉堛劌绗ч柍褜鍓ㄧ紞鍡樼閻愬顩烽柕蹇嬪灮绾惧ジ鏌熼柇锕€骞橀柍钘夘槹閵囧嫰顢旈崟顐f婵犵鈧磭鍩g€规洖宕埢搴ょ疀閿濆棙顦风紓鍌氬€搁崐椋庢閿熺姴绐楁慨姗嗗幘缁犻箖鏌嶈閸撴盯鍩€椤掑喚娼愭繛璇х畵瀹曡瀵肩€涙ê浠煎┑鐘绘涧椤戝懘鎮為崹顐犱簻闁圭儤鍨甸埀顒€缍婇敐鐐哄即閵忥紕鍘甸梺纭咁潐閸旓箓宕靛▎鎴犳/闁诡垎鍐╁€紓浣虹帛閻╊垰鐣烽崡鐐嶇喖鎼归悷鏉啃┑鐘殿暯閳ь剝娅曢埢鏇㈡煕閻樺磭澧甸柍銉︽瀹曟﹢顢欓崲澹洦鐓曢柍鈺佸枤濞堟ê霉閻樿櫕灏︽慨濠呮濞戠敻宕ㄩ鎯ф锭闂備焦瀵уú蹇涘垂閼恒儰绻嗛悗娑欋缚閻熷綊鏌嶈閸撴瑩顢氶敐鍡欘浄閻庯絽鐏氶弲锝夋⒑缂佹ê濮嶆繛浣冲洤鐒垫い鎺戝€告禒婊勩亜椤忓嫬鏆e┑鈥崇埣瀹曞崬螖閸愵亝鍣┑锛勫亼閸娧呯磽濮樿泛纭€闁告劕妯婇崵鏇㈡煙缂佹ê鍧婇柛顐邯閺屾盯骞囬闂村闁诲酣娼ч惌鍌氼潖濞差亝顥堟繛鎴炶壘椤e搫鈹戦埥鍡椾簼妞ゃ劌鐗忛崚鎺楊敇閵忕姷顔婂┑掳鍊撶粈渚€鍩€椤掆偓閻忔岸骞堥妸銉庣喖鎮℃惔鈥茬帛濠电姭鎷冮崟顒€鍞夐梺鍝勭灱閸犳牠銆佸☉姗嗘僵闁告劕妯婃导鍐⒑閸撗呭笡闁绘濞€瀵鈽夊Ο閿嬵潔闂佸憡顨堥崑鐐烘倶閹剧粯鈷戦柛娑橈功閹冲啯淇婇锝囩畵妞ゎ偄绻橀幖褰掑捶椤撶媴绱叉繝纰樻閸ㄩ潧鐣烽悽鏉嗗洭濡烽埡鍌楁嫼缂備礁顑呯亸鍛啅閵夛妇绡€闁逞屽墴閺屽棗顓奸崨顖氬Е婵$偑鍊栫敮濠囨嚄閸洖鐤柡灞诲劜閻撴瑩鏌涢幋娆忊偓鏍偓姘炬嫹
    C闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻锝夊箣閿濆憛鎾绘煕閵堝懎顏柡灞剧洴椤㈡洟鏁愰崱娆樻К缂備胶鍋撻崕鍐册缚閿熺姴钃熼柨婵嗩槸椤懘鏌嶉幆鐗堢【缂傚秴锕獮鍐锤濡や礁鈧攱銇勯幒鎴濃偓濠氭儊閸喓绡€闁汇垽娼у瓭闂佺ǹ锕ラ幃鍌氼嚕閹惰姤鍋勯柛鎾冲级椤旀棃姊虹紒妯哄闁宦板妼閻e嘲鐣濋崟顒傚幐闁诲繒鍋涙晶浠嬧€栭崗绗轰簻闁挎洑鐒﹂悵顏堟煏閸パ冾伃濠碘剝鎮傛俊鐑芥晝閳ь剙鈻撳Δ鍛€甸悷娆忓缁€鈧紓鍌氱Т閿曘倝鎮鹃悜钘夌婵°倓绀侀埀顒傚厴閺屻倗鍠婇崡鐐测拻闂佸摜鍠庡ú顓烆潖濞差亜浼犻柛鏇炵仛绗戦梻浣虹帛椤ㄥ懎螞濞嗘挸鐤鹃柤鍝ユ暩椤╃兘鎮楅敐搴濈敖闁伙絾妞藉铏圭矙鐠恒劎顔掑┑鈽嗗亯濞夋洟骞戦姀銈呭耿婵☆垶鏅茬花濠氭⒑闁稑宓嗘繛浣冲嫮顩叉繝濠傜墛閻撶喖鐓崶銉ュ姢缂佲檧鍋撻梻浣告惈閺堫剙煤閻旈鏆﹂柟顖炲亰濡茶顪冮妶鍛闁告ü绮欐俊鐢稿礋椤栨凹娼婇梺鏂ユ櫅閸熶即藝閺夋娓婚柕鍫濆暙閻忣亝绻涢懠顒€鏋戦柟渚垮姂閸┾偓妞ゆ帒瀚悡銉︾箾閹寸伝顏堫敂瑜嶉…璺ㄦ喆閸曨剛顦紓浣介哺閹瑰洤鐣烽幒鎴僵妞ゆ垼妫勬禍鎯ь渻鐎n亜顒㈠┑顖氥偢閺岋紕浠︾拠鎻掑缂佺偓鍎抽…鐑藉蓟閻斿吋鍊锋い鎺嗗亾濠⒀屽灦閺岋綁寮幐搴&闂佽鍠涢~澶娽缚椤忓牆绠€光偓婵犲倸韦闂傚倷鑳舵灙閻庢稈鏅犲畷褰掑捶椤撶噥娼熼梺鍦劋椤ㄥ棝宕戦幇鐗堢厾濠殿喗鍔曢埀顒侇殜瀵娊顢曢敂瑙f嫼闂佸憡绻傜€氼噣鎮橀柆宥嗙厱闁绘ê纾晶鐢告煟濞戝崬娅嶆鐐差儔閺佸啴鍩€椤掑倻涓嶆繛鎴炵懀娴滄粓鏌熼幑鎰【鐎涙繂鈹戦悙鏉戞瘑闁搞儯鍔夐幏缁樼箾閹炬潙鐒归柛瀣尰缁绘盯鎳濋弶鍨優閻庡灚婢橀敃顏堝箠閺嶎厼鐓涘ù锝呮憸娴滅増绻濋悽闈涗粶婵☆偅鐟╅獮鎰板箹娴g懓鐝旈梺缁樻煥閸氬鎮¢悢鍏肩厸闁告劑鍔岄埀顒傛暬楠炲繘鏁撻悩宕囧幐婵炶揪缍佸ḿ濠氬礉閻斿吋鐓熼柕澶樺枙闁垱銇勯姀鈽呰€块柟顔界懇瀹曪絾绔熼娑欐珕缂佺粯鐩鍫曞箣濠靛洤鈧垶姊洪崨濠冣拹婵炶尙鍠栭崹楣冨籍閸繄顦ㄥ銈嗘煥濡插牐顦归柡灞剧洴閸╁嫰宕橀敍鍕獥闂備礁鎲¢悷銉ノ涘☉姘潟闁规儳鐡ㄦ刊鎾煣韫囨洘鍤€缂佹绻濋弻锕傚礃閵娿儴鍩為柤鎸庡姍閺屾盯濡烽幋婵埿ラ柛姘煎亰濮婅櫣鎷犻垾铏亶缂備緡鍠楅幑鍥嵁閹邦厾绡€闁告劦浜炶ぐ楣冩⒑瀹曞洦鍤€闁诲繑绻冮幈銊╁磼閻愬鍘搁柣蹇曞仧閸嬫挾绮堥崘顏佸亾閸偅绶查悗姘緲閻g兘鎮℃惔妯绘杸闂佺硶鍓濋妵鍛村箣閻愮數鐦堢紒鍓у钃辨い顐躬閺屾盯濡搁妶鍥╃厯濡ょ姷鍋涚换姗€寮幘缁樻櫢闁跨噦鎷�