摘要:此前,在月底,阿里媽媽就公布了這項(xiàng)開源計(jì)劃,引來了業(yè)界的廣泛關(guān)注。突破了現(xiàn)有深度學(xué)習(xí)開源框架大都面向圖像語音等低維稠密數(shù)據(jù)而設(shè)計(jì)的現(xiàn)狀,面向高維稀疏數(shù)據(jù)場(chǎng)景進(jìn)行了深度優(yōu)化,并已大規(guī)模應(yīng)用于阿里媽媽的業(yè)務(wù)及生產(chǎn)場(chǎng)景。
剛剛,阿里媽媽正式對(duì)外發(fā)布了X-Deep Learning(下文簡(jiǎn)稱XDL)的開源代碼地址,開發(fā)者們可以在Github上自主下載。
此前,在11月底,阿里媽媽就公布了這項(xiàng)開源計(jì)劃,引來了業(yè)界的廣泛關(guān)注。XDL突破了現(xiàn)有深度學(xué)習(xí)開源框架大都面向圖像、語音等低維稠密數(shù)據(jù)而設(shè)計(jì)的現(xiàn)狀,面向高維稀疏數(shù)據(jù)場(chǎng)景進(jìn)行了深度優(yōu)化,并已大規(guī)模應(yīng)用于阿里媽媽的業(yè)務(wù)及生產(chǎn)場(chǎng)景。本文將為大家詳細(xì)介紹XDL的設(shè)計(jì)理念及關(guān)鍵技術(shù)。
概述以深度學(xué)習(xí)為核心的人工智能技術(shù),過去的幾年在語音識(shí)別、計(jì)算機(jī)視覺、自然語言處理等領(lǐng)域獲得了巨大的成功,其中以GPU為代表的硬件計(jì)算力,以及優(yōu)秀的開源深度學(xué)習(xí)框架起到了巨大的推動(dòng)作用。
盡管以TensorFlow、PyTorch、MxNet等為代表的開源框架已經(jīng)取得了巨大的成功,但是當(dāng)我們把深度學(xué)習(xí)技術(shù)應(yīng)用在廣告、推薦、搜索等大規(guī)模工業(yè)級(jí)場(chǎng)景時(shí),發(fā)現(xiàn)這些框架并不能很好的滿足我們的需求。矛盾點(diǎn)在于開源框架大都面向圖像、語音等低維連續(xù)數(shù)據(jù)設(shè)計(jì),而互聯(lián)網(wǎng)的眾多核心應(yīng)用場(chǎng)景(如廣告/推薦/搜索)往往面對(duì)的是高維稀疏離散的異構(gòu)數(shù)據(jù),參數(shù)的規(guī)模動(dòng)輒百億甚至千億。進(jìn)一步的,不少產(chǎn)品應(yīng)用需要大規(guī)模深度模型的實(shí)時(shí)訓(xùn)練與更新,現(xiàn)有開源框架在分布式性能、計(jì)算效率、水平擴(kuò)展能力以及實(shí)時(shí)系統(tǒng)適配性的等方面往往難以滿足工業(yè)級(jí)生產(chǎn)應(yīng)用的需求。
X-DeepLearning正是面向這樣的場(chǎng)景設(shè)計(jì)與優(yōu)化的工業(yè)級(jí)深度學(xué)習(xí)框架,經(jīng)過阿里巴巴廣告業(yè)務(wù)的錘煉,XDL在訓(xùn)練規(guī)模和性能、水平擴(kuò)展能力上都表現(xiàn)出色,同時(shí)內(nèi)置了大量的面向廣告/推薦/搜索領(lǐng)域的工業(yè)級(jí)算法解決方案。
系統(tǒng)核心能力
1) 為高維稀疏數(shù)據(jù)場(chǎng)景而生。支持千億參數(shù)的超大規(guī)模深度模型訓(xùn)練,支持批學(xué)習(xí)、在線學(xué)習(xí)等模式。
2) 工業(yè)級(jí)分布式訓(xùn)練能力。支持CPU/GPU的混合調(diào)度,具備完整的分布式容災(zāi)語義,系統(tǒng)的水平擴(kuò)展能力優(yōu)秀,可以輕松做到上千并發(fā)的訓(xùn)練。
3) 高效的結(jié)構(gòu)化壓縮訓(xùn)練。針對(duì)互聯(lián)網(wǎng)樣本的數(shù)據(jù)特點(diǎn),提出了結(jié)構(gòu)化計(jì)算模式。典型場(chǎng)景下,相比傳統(tǒng)的平鋪樣本訓(xùn)練方式,樣本存儲(chǔ)空間、樣本IO效率、訓(xùn)練絕對(duì)計(jì)算量等方面都大幅下降,推薦等場(chǎng)景下整體訓(xùn)練效率最大可提升10倍以上。
4) 成熟多后端支持。單機(jī)內(nèi)部的稠密網(wǎng)絡(luò)計(jì)算復(fù)用了成熟開源框架的能力,只需要少量的分布式驅(qū)動(dòng)代碼修改,就可以把TensorFlow/MxNet等的單機(jī)代碼運(yùn)行在XDL上,獲得XDL分布式訓(xùn)練與高性能稀疏計(jì)算的能力。
內(nèi)置工業(yè)級(jí)算法解決方案
1)點(diǎn)擊率預(yù)估領(lǐng)域的最新算法,包括深度興趣網(wǎng)絡(luò)(Deep Interest Network, DIN),用戶興趣演化模型(Deep Interest Evolution Network, DIEN),跨媒介網(wǎng)絡(luò)(Cross Media Network,CMN)。
2)點(diǎn)擊率&轉(zhuǎn)化率聯(lián)合建模的全空間多任務(wù)模型(Entire Space Multi-task Model, ESMM)。
3)匹配召回領(lǐng)域的最新算法——深度樹匹配模型(Tree-based Deep Match,TDM)。
4)輕量級(jí)通用模型壓縮算法(Rocket Training)
系統(tǒng)設(shè)計(jì)與優(yōu)化XDL-Flow:數(shù)據(jù)流與分布式運(yùn)行時(shí)
XDL-Flow驅(qū)動(dòng)整個(gè)深度學(xué)習(xí)計(jì)算圖的生成與執(zhí)行,包括樣本流水線、稀疏表征學(xué)習(xí)、稠密網(wǎng)絡(luò)學(xué)習(xí)。同時(shí),XDL-Flow也負(fù)責(zé)分布式模型的存儲(chǔ)與交換控制邏輯,分布式容災(zāi)與恢復(fù)控制等全局一致性協(xié)調(diào)的工作。
在搜索、推薦、廣告等場(chǎng)景下的樣本量巨大,通常達(dá)到幾十TB至數(shù)百TB,如果不能很好的優(yōu)化樣本流水線,樣本IO系統(tǒng)很容易成為整個(gè)系統(tǒng)的瓶頸,從而導(dǎo)致計(jì)算硬件的利用率低下。在大規(guī)模稀疏場(chǎng)景下,樣本讀取的特點(diǎn)是IO密集,稀疏表征計(jì)算的特點(diǎn)是參數(shù)交換網(wǎng)絡(luò)通信密集,稠密深度計(jì)算是計(jì)算密集型。
XDL-Flow通過把三個(gè)主要環(huán)節(jié)異步流水線并行,較好的適配了3種不同類型任務(wù)的性能。最好的情況下,前兩個(gè)階段的延時(shí)都被隱藏了。同時(shí),我們也正在嘗試自動(dòng)化的Tunning異步流水線的各個(gè)參數(shù),包括各個(gè)Step的并行度、Buffer大小等,盡可能讓用戶不需要關(guān)心整個(gè)異步流水線并行的細(xì)節(jié)。
AMS:高效模型服務(wù)器
AMS是面向稀疏場(chǎng)景專門設(shè)計(jì)與優(yōu)化的分布式模型存儲(chǔ)與交換子系統(tǒng)。我們綜合小包網(wǎng)絡(luò)通信、參數(shù)存儲(chǔ)結(jié)構(gòu)、參數(shù)分布式策略等進(jìn)行了大量的軟硬件優(yōu)化,使得AMS在吞吐力和水平擴(kuò)展力上都大幅優(yōu)于傳統(tǒng)的Parameter Server,AMS也支持內(nèi)置的深度網(wǎng)絡(luò)計(jì)算,使得你可以使用AMS進(jìn)行表征子網(wǎng)絡(luò)的二階計(jì)算。
1)AMS通過軟硬件結(jié)合在網(wǎng)絡(luò)通信層做了大量?jī)?yōu)化,包括使用Seastar,DPDK,CPUBind,ZeroCopy等技術(shù),充分壓榨硬件性能,經(jīng)過我們實(shí)際測(cè)試,大規(guī)模并發(fā)訓(xùn)練下,參數(shù)交換導(dǎo)致的小包吞吐能力是傳統(tǒng)RPC框架的5倍以上。
2)通過內(nèi)置的參數(shù)動(dòng)態(tài)均衡策略,可以在運(yùn)行過程中找到最優(yōu)的稀疏參數(shù)分布策略,有效解決傳統(tǒng)參數(shù)服務(wù)器由于參數(shù)分布式不均勻帶來的熱點(diǎn)問題,大幅提高了系統(tǒng)在高并發(fā)情況下的水平擴(kuò)展能力。
3)AMS同樣支持通過GPU加速大Batch Size場(chǎng)景下的Sparse Embedding計(jì)算,針對(duì)超大Batch的場(chǎng)景,可以起到很好的加速作用。
4)AMS支持內(nèi)部定義子網(wǎng)絡(luò)。例如我們的算法解決方案中提供的Cross-Media建模,圖像部分的表征子網(wǎng)絡(luò)就是以AMS內(nèi)運(yùn)行的方式定義的,大幅減少了重復(fù)計(jì)算和網(wǎng)絡(luò)吞吐。
Backend Engine:橋接技術(shù)復(fù)用成熟框架的單機(jī)能力
為了充分利用現(xiàn)有開源深度學(xué)習(xí)框架在稠密深度網(wǎng)絡(luò)上的能力,XDL使用橋接技術(shù)(Bridging),把開源深度學(xué)習(xí)框架(本期開源版XDL支持了TensorFlow、MxNet)作為我們的單機(jī)稠密網(wǎng)絡(luò)的計(jì)算引擎后端。用戶可以在保留TensorFlow或MxNet網(wǎng)絡(luò)開發(fā)習(xí)慣的同時(shí),通過少量的驅(qū)動(dòng)代碼修改,就直接獲得XDL在大規(guī)模稀疏計(jì)算上的分布式訓(xùn)練能力。換句話說,使用XDL時(shí)無需再學(xué)習(xí)一門新的框架語言,這帶來另一個(gè)好處是XDL可以跟現(xiàn)有成熟的開源社區(qū)無縫對(duì)接——用戶可以很輕松地將tensorflow社區(qū)的某個(gè)開源模型通過XDL拓展到工業(yè)級(jí)場(chǎng)景。
Compact Computation:結(jié)構(gòu)化計(jì)算模式大幅提升訓(xùn)練效率
工業(yè)界稀疏場(chǎng)景下的樣本表征,往往呈現(xiàn)很強(qiáng)的結(jié)構(gòu)化特點(diǎn),例如用戶特征、商品特征、場(chǎng)景特征。這種構(gòu)建方式?jīng)Q定了某些特征會(huì)大量出現(xiàn)在重復(fù)的樣本中——隸屬于同一個(gè)用戶的多條樣本中,用戶特征很大一部分是相同的。結(jié)構(gòu)化樣本壓縮正是利用海量樣本中,大量局部特征重復(fù)這一特點(diǎn),在存儲(chǔ)和計(jì)算兩個(gè)維度上對(duì)特征進(jìn)行壓縮,節(jié)省了存儲(chǔ)、計(jì)算和通信帶寬資源。樣本預(yù)處理階段,對(duì)需要聚合的特征進(jìn)行排序(例如按用戶ID排序,聚合用戶特征);batching階段,在tensor層面進(jìn)行壓縮;計(jì)算階段,壓縮特征只有在最后一層才會(huì)展開,極大節(jié)省深層網(wǎng)絡(luò)的計(jì)算開銷。 推薦場(chǎng)景下的效果驗(yàn)證表示,在典型的生產(chǎn)數(shù)據(jù)上,使用聚合排序的樣本和完全shuffle的樣本評(píng)估AUC指標(biāo)一致,整體性能提升10倍以上。
Online-Learning:大規(guī)模在線學(xué)習(xí)
在線學(xué)習(xí)近年來在工業(yè)界開始被大規(guī)模應(yīng)用,它是工程與算法的深入結(jié)合,賦予模型實(shí)時(shí)捕捉線上流量變化的能力,在一些對(duì)時(shí)效性要求很高的場(chǎng)景,有十分大的價(jià)值。例如在電商大促等場(chǎng)景下,在線學(xué)習(xí)可以更加實(shí)時(shí)的捕捉用戶行為的變化,顯著的提升模型的實(shí)時(shí)效果。XDL提供了一套完整的在線學(xué)習(xí)的解決方案,支持基于全量模型,讀取實(shí)時(shí)消息隊(duì)列里的樣本進(jìn)行實(shí)時(shí)持續(xù)學(xué)習(xí),我們內(nèi)置支持了Kafka等作為Message Source,并允許按照用戶設(shè)置控制模型寫出的周期。另外,為了避免無限制的新特征流入導(dǎo)致的實(shí)時(shí)模型爆炸問題,XDL內(nèi)置了實(shí)時(shí)特征自動(dòng)選擇與過期特征淘汰等功能,保證用戶使用XDL進(jìn)行在線學(xué)習(xí)的簡(jiǎn)便性。
1)去ID化的稀疏特征學(xué)習(xí):傳統(tǒng)的機(jī)器學(xué)習(xí)框架一般要求對(duì)稀疏特征進(jìn)行ID化表征(從0開始緊湊編碼),以此來保證訓(xùn)練的高效性。XDL則允許直接以原始的特征進(jìn)行訓(xùn)練,大幅簡(jiǎn)化了特征工程的復(fù)雜度,極大地增加了全鏈路數(shù)據(jù)處理效率,這一特性在實(shí)時(shí)在線學(xué)習(xí)場(chǎng)景下顯得更加有意義。
2)實(shí)時(shí)特征頻控:用戶可以設(shè)置一個(gè)特征過濾的閾值,例如出現(xiàn)次數(shù)大于N次的特征才納入模型訓(xùn)練,系統(tǒng)會(huì)自動(dòng)的采用自動(dòng)概率丟棄的算法進(jìn)行特征選擇,這樣可以大幅降低無效超低頻特征在模型中的空間占用。
3)過期特征淘汰:長(zhǎng)周期的在線學(xué)習(xí)時(shí),用戶也可以通過打開過期特征淘汰功能,系統(tǒng)會(huì)自動(dòng)的對(duì)影響力弱且長(zhǎng)周期沒有碰觸到的特征參數(shù)進(jìn)行自動(dòng)淘汰。
X-DeepLearning算法解決方案典型的點(diǎn)擊率(Click-Through Rate)預(yù)估模型
DIN(Deep Interest Network)
傳統(tǒng)的Embedding&MLP類的模型并未對(duì)用戶的表達(dá)做過多的工作。往往通過embedding的機(jī)制將用戶的歷史行為投影到一個(gè)定長(zhǎng)的向量空間,再經(jīng)過一個(gè)sum/avg pooling操作得到一個(gè)定長(zhǎng)的用戶向量表達(dá)。但是用戶的興趣是多種多樣的,用一個(gè)固定的向量去表達(dá)用戶不同的興趣是非常難的。事實(shí)上用戶在面對(duì)不同商品的時(shí)候,其興趣表現(xiàn)也不一樣,僅僅和這個(gè)商品相關(guān)的興趣會(huì)影響用戶的決策。
因此我們?cè)陬A(yù)估用戶對(duì)一個(gè)具體商品的點(diǎn)擊率的時(shí)候只需要表達(dá)其與此商品相關(guān)的興趣。在DIN中我們提出了一個(gè)興趣激活機(jī)制,通過被預(yù)估的商品去激活用戶歷史行為中相關(guān)的部分,從而獲取用戶在這個(gè)具體商品上的興趣。
論文地址:https://arxiv.org/abs/1706.06978
DIEN(Deep Interest Evolution Network)
DIEN主要解決兩個(gè)問題:興趣提取和興趣演化。在興趣提取這部分,傳統(tǒng)的算法直接將用戶的歷史行為當(dāng)做用戶的興趣。同時(shí)整個(gè)建模過程中的監(jiān)督信息全部集中于廣告點(diǎn)擊樣本上。而單純的廣告點(diǎn)擊樣本只能體現(xiàn)用戶在決策是否點(diǎn)擊廣告時(shí)的興趣,很難建模好用戶歷史每個(gè)行為時(shí)刻的興趣。
本文中我們提出了auxiliary loss 用于興趣提取模塊,約束模型在對(duì)用戶每一個(gè)歷史行為時(shí)刻的隱層表達(dá)能夠推測(cè)出后續(xù)的行為,我們希望這樣的隱層表達(dá)能更好的體現(xiàn)用戶在每一個(gè)行為時(shí)刻的興趣。在興趣提取模塊后我們提出了興趣演化模塊,傳統(tǒng)的RNN類似的方法只能建模一個(gè)單一的序列,然而在電商場(chǎng)景 用戶不同的興趣其實(shí)有不同的演化過程。在本文中我們提出AUGRU(Activation Unit GRU),讓GRU的update門和預(yù)估的商品相關(guān)。在建模用戶的興趣演化過程中,AUGRU會(huì)根據(jù)不同的預(yù)估目標(biāo)商品構(gòu)建不同的興趣演化路徑,推斷出用戶和此商品相關(guān)的興趣。
論文地址:https://arxiv.org/abs/1809.03672
CMN(Cross Media Network)
CMN旨在CTR預(yù)估模型中引入更多的模態(tài)數(shù)據(jù),如圖像信息。在原有ID類特征基礎(chǔ)上,增加了圖像視覺特征,共同加入廣告CTR預(yù)估模型,在阿里媽媽大規(guī)模數(shù)據(jù)上取得了顯著的效果提升。CMN包括多項(xiàng)技術(shù)特色:第一,圖像內(nèi)容特征抽取模型與主模型共同訓(xùn)練,聯(lián)合優(yōu)化; 第二,同時(shí)使用圖像信息表達(dá)廣告和用戶,其中用戶表達(dá)采用用戶歷史行為對(duì)應(yīng)的圖片; 第三,為處理訓(xùn)練涉及到的海量圖像數(shù)據(jù),提出了“高級(jí)模型服務(wù)”的計(jì)算范式,有效減少訓(xùn)練過程中的計(jì)算、通信、存儲(chǔ)負(fù)載。CMN除用于圖像特征引入外,對(duì)于文本、視頻等內(nèi)容特征也可以以合適的特征提取網(wǎng)絡(luò)、用同樣的模型處理。
論文地址:https://arxiv.org/abs/1711.06505
典型的轉(zhuǎn)化率(Conversion Rate)預(yù)估模型
ESMM(Entire Space Multi-task Model)
Entire Space Multi-task Model (ESMM) 是阿里媽媽研發(fā)的新型多任務(wù)聯(lián)合訓(xùn)練算法范式。ESMM模型首次提出了利用學(xué)習(xí)CTR和CTCVR的輔助任務(wù)迂回學(xué)習(xí)CVR的思路,利用用戶行為序列數(shù)據(jù)在完整樣本空間建模,避免了傳統(tǒng)CVR模型經(jīng)常遭遇的樣本選擇偏差和訓(xùn)練數(shù)據(jù)稀疏的問題,取得了顯著的效果。
ESMM 可以很容易地推廣到具有序列依賴性的用戶行為(瀏覽、點(diǎn)擊、加購、購買等)預(yù)估中,構(gòu)建全鏈路多目標(biāo)預(yù)估模型。ESMM模型中的BASE子網(wǎng)絡(luò)可以替換為任意的學(xué)習(xí)模型,因此ESMM的框架可以非常容易地和其他學(xué)習(xí)模型集成,從而吸收其他學(xué)習(xí)模型的優(yōu)勢(shì),進(jìn)一步提升學(xué)習(xí)效果,想象空間巨大。
論文地址:https://arxiv.org/abs/1804.07931
典型的匹配召回模型
TDM(Tree-based Deep Match)
TDM自主創(chuàng)新提出了一套完整的基于樹的復(fù)雜深度學(xué)習(xí)推薦匹配算法框架,它通過建立用戶興趣層次樹結(jié)構(gòu)實(shí)現(xiàn)了高效的全庫檢索,并以此為基礎(chǔ)賦能深度模型引入Attention等更先進(jìn)的計(jì)算結(jié)構(gòu),達(dá)到了在精度、召回率以及新穎性等指標(biāo)上相對(duì)于傳統(tǒng)推薦方法的顯著效果提升。
進(jìn)一步的,TDM設(shè)計(jì)實(shí)現(xiàn)了一套完整的 初始樹-模型訓(xùn)練-樹重建-模型再訓(xùn)練 的聯(lián)合訓(xùn)練迭代框架,更加促進(jìn)了效果的提升。聯(lián)合訓(xùn)練賦予了TDM算法框架較好的通用性,為TDM向新場(chǎng)景、新領(lǐng)域的遷移擴(kuò)展提供了良好的理論基礎(chǔ)和極大的工程可行性。
論文地址:https://arxiv.org/abs/1801.02294
典型的模型壓縮算法
Rocket Training
工業(yè)上在線模型的實(shí)時(shí)推理對(duì)響應(yīng)時(shí)間提出非常嚴(yán)苛的要求,從而一定程度上限制了模型的復(fù)雜程度。模型復(fù)雜程度的受限可能會(huì)導(dǎo)致模型學(xué)習(xí)能力的降低從而帶來效果的下降。
目前有2種思路來解決這個(gè)問題:一方面,可以在固定模型結(jié)構(gòu)和參數(shù)的情況下,用計(jì)算數(shù)值壓縮來降低inference時(shí)間,同時(shí)也有設(shè)計(jì)更精簡(jiǎn)的模型以及更改模型計(jì)算方式的工作,如Mobile Net和ShuffleNet等工作。
另一方面,利用復(fù)雜的模型來輔助一個(gè)精簡(jiǎn)模型的訓(xùn)練,測(cè)試階段,利用學(xué)習(xí)好的小模型來進(jìn)行推理。這兩種方案并不沖突,在大多數(shù)情況下第二種方案可以通過第一種方案進(jìn)一步降低inference時(shí)間,同時(shí),考慮到相對(duì)于嚴(yán)苛的在線響應(yīng)時(shí)間,我們有更自由的訓(xùn)練時(shí)間,有能力訓(xùn)練一個(gè)復(fù)雜的模型。Rocket Training屬于第二種思路,它比較的輕巧優(yōu)雅,方法具有很強(qiáng)的通用性,可以根據(jù)系統(tǒng)能力來定制模型復(fù)雜度,提供了一種"無極調(diào)速"手段。在阿里媽媽的生產(chǎn)實(shí)踐中,Rocket Training可以極大地節(jié)省在線計(jì)算資源,顯著提升系統(tǒng)應(yīng)對(duì)雙十一大促等流量洪峰的能力。
論文地址:https://arxiv.org/abs/1708.04106
BenchMark我們提供幾組Benchmark數(shù)據(jù)供大家參考,重點(diǎn)看一下XDL在大batch、小batch等場(chǎng)景下的訓(xùn)練性能以及水平可擴(kuò)展能力,以及結(jié)構(gòu)化壓縮訓(xùn)練帶來的提速。
基于CPU訓(xùn)練的深度CTR模型
我們選取模型結(jié)構(gòu)為Sparse Embedding DNN結(jié)構(gòu),N路Sparse特征分別做Embedding,再通過BiInteraction得到若干路NFM特征。選擇兩個(gè)特征規(guī)模的場(chǎng)景,Sparse特征總規(guī)模分別約為10億(對(duì)應(yīng)百億參數(shù))/100億(對(duì)應(yīng)千億參數(shù)),dense維度為數(shù)百維,單條樣本Sparse特征id數(shù)量約100+/300+個(gè)。
訓(xùn)練模式:BatchSize=100,異步SGD訓(xùn)練。
從bechmark結(jié)果可以看到,在高維稀疏場(chǎng)景下,XDL有明顯的優(yōu)勢(shì),在相當(dāng)大并發(fā)的情況下,保持了良好的線性可擴(kuò)展能力。
基于GPU訓(xùn)練的深度CTR模型
本文作者:XDL
閱讀原文
本文來自云棲社區(qū)合作伙伴“阿里技術(shù)”,如需轉(zhuǎn)載請(qǐng)聯(lián)系原作者。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/19879.html
閱讀 3208·2021-11-12 10:36
閱讀 1258·2019-08-30 15:56
閱讀 2442·2019-08-30 11:26
閱讀 550·2019-08-29 13:00
閱讀 3608·2019-08-28 18:08
閱讀 2748·2019-08-26 17:18
閱讀 1892·2019-08-26 13:26
閱讀 2431·2019-08-26 11:39