Apprenez à calculer la profondeur optimale du niveau du système?

 Ji-won nouvelle recommandation

Source: titres Microsoft Research AI

Auteur: Wu Ming

[New Ji-won EXAMEN Dans l'image, la reconnaissance vocale, le traitement du langage naturel, l'apprentissage de renforcement, et bien d'autres domaines techniques, l'apprentissage en profondeur est avérée être très efficace, et sur certaines questions a été atteint même au-delà du niveau humain. Cependant, la profondeur de l'apprentissage pour la puissance de calcul a une grande dépendance, en plus de changer le modèle et l'algorithme peut être optimisé pour l'apprentissage profond calculé à partir du système, améliorant ainsi l'utilisation efficace des ressources informatiques? Cet article de Microsoft Research Asia groupe informatique hétérogène, recherche senior fellow Wu-ming de partager quelques-uns des points de vue qu'il optimisation calculée de la profondeur d'apprentissage avec vous.

étude approfondie a fait ces dernières années des progrès considérables, il a été ou devrait être appliqué avec succès dans plusieurs de nos situations de vie, comme la conduite automatique, la sécurité, la traduction, médicale et ainsi de suite. On peut dire, d'améliorer grandement les capacités de calcul et de communication des ordinateurs est un facteur important pour favoriser la réussite de l'apprentissage en profondeur.

Pourquoi compter sur une grande étude approfondie de la puissance de calcul?

Tout d'abord, la profondeur de l'apprentissage est basé sur la nature statistique de la science, de sorte que des données d'échantillon à grande échelle est essentielle pour l'effet de la profondeur de l'apprentissage. En second lieu, le plus grand et plus complexe modèle de réseau de neurones a été prouvé être très efficace, et il est largement utilisé dans le produit, il crée également une plus grande demande de puissance de calcul et de consommation. Par exemple, avec 8 AlexNet réseau de neurones de la couche 2012 pour obtenir le taux d'erreur de 16% sur ensemble de données de IMAGEnet, la première itération de la course de réseau d'environ 1,4 besoins de calcul Gflop. Microsoft a proposé d'utiliser un réseau de 152 neurones de la couche résiduelle (le ResNet) pour obtenir 3,5% de taux d'erreur dans l'ensemble de données 2015, qui calcule la quantité d'environ une itération 22.6GFLOP, 16 fois le AlexNet. Dans l'environnement de production d'aujourd'hui, l'image, la voix et le langage naturel de traitement des modèles connexes, comme la reconnaissance de visage, la voix-texte, la traduction automatique, même donné une quantité considérable de ressources informatiques, beaucoup reste encore plusieurs semaines pour compléter la formation.

Encore une fois, la profondeur du modèle d'apprentissage est l'itération rapide. Dans le domaine de la grippe aviaire, le monde universitaire et de l'industrie annuelle soulèvera un grand nombre de nouveaux modèles. Pour chaque problème réel, les développeurs ont besoin de continuer à essayer différents modèles et des algorithmes, même pour le même algorithme de modèle, ont également besoin d'aller encore et encore pour obtenir le meilleur paramètre pour prédire les résultats. On peut imaginer que si chaque modèle de formation doit être quelques semaines, puis trouver le modèle optimal du processus sera très long et douloureux.

De plus, le modèle a une ligne plus extrême de raisonnement exigences de performance. ligne de service ont un accord de niveau de service rigide (SLA), de sorte que dans le déploiement réel de grands modèles, vous devez re-optimiser manuellement le cadre d'apprentissage en profondeur (par exemple tensorflow) ont été le modèle formé, ce qui entraîne des frais généraux d'ingénierie supplémentaires importants.

Ainsi, une étude plus approfondie de profondeur calculée pour optimiser le développement rapide et l'application réussie de l'apprentissage en profondeur joue un rôle essentiel.

Calculer l'étude en profondeur optimal des défis et opportunités

À l'heure actuelle, l'optimisation de la profondeur de l'apprentissage, il y a plusieurs défis majeurs:

1) l'unité de calcul à l'unité à l'unité (par exemple, GPU), les contraintes de ressources ne peuvent souvent pas satisfaire aux exigences de traitement de données à grande échelle et le modèle, alors la nécessité d'utiliser l'unité de calcul multiple de la taille de l'appareil calcule la balance. Comment pouvons-nous réduire les frais généraux de la communication afin de maximiser le parallélisme des multi-machine?

2) l'optimisation de calcul de réseau neuronal permet de calculer une unité matérielle unique pour maximiser l'efficacité?

3) Alors que beaucoup l'unité de calcul matériel (GPU, FPGA, etc.) la puissance de calcul est très forte, mais leurs ressources mémoire (mémoire de l'appareil) est très rare. Quand ils ne fournissent pas les ressources mémoire nécessaires pour exécuter le modèle, que ce soit le fonctionnement ne peut pas continuer, ou vous devez calculer les données nécessaires entre la mémoire principale et brassage mémoire de l'appareil avant et en arrière, beaucoup de frais généraux de fonctionnement. Comment pouvons-nous mieux utiliser les ressources mémoire limitées du dispositif afin de ne pas avoir un impact négatif sur l'efficacité de calcul?

4) Les développeurs de Deep apprentissage et les chercheurs en général veulent juste se concentrer sur le modèle de réseau de neurones et lui-même algorithme, nous ne voulons pas être distraits par des problèmes d'optimisation complexes. Le meilleur tel système qui signifie que le logiciel cadre d'apprentissage en profondeur peut optimiser automatiquement les développeurs de modèles et transparents. Alors, comment faire abstraction rationnelle des optimisations spécifiques pour le rendre plus souple et polyvalent, les questions d'intégration plus facile dans le cadre du système est la nécessité d'envisager sérieusement.

En fait, tous les aspects du problème d'optimisation peut être vu sous deux angles algorithmes modèles et systèmes. D'une part, nous pouvons optimiser son efficacité dans l'utilisation des ressources informatiques en changeant les modèles et algorithmes pour améliorer sa vitesse. Une telle optimisation est souvent très efficace pour un algorithme particulier, mais il est difficile d'étendre l'application à d'autres algorithmes. D'autre part, est l'étude du groupe informatique hétérogène à Microsoft Research Asia en cours, il est algorithme d'optimisation modèle indépendant mis en uvre dans le système, ces optimisations peuvent généralement bénéficier des performances pour plus d'applications en même temps répondre également aux exigences de transparence que nous avons mentionnés dans le texte précédent.

Optimisation du système pour aider à calculer la profondeur de l'apprentissage

Afin de mieux comprendre ce niveau de système d'optimisation, nous avons d'abord brièvement expliquer la profondeur d'arrière-plan système cadre d'apprentissage. Populaire dans le système profondeur de l'industrie d'aujourd'hui d'apprentissage (y compris tensorflow, PyTorch, CNTK, MxNet, Caffe, etc.) ont été alimentés par un système de conception de structure en couches. Fournit langage de haut niveau (par exemple, python) à une abstraction de l'interface d'extrémité avant permettant aux utilisateurs de la structure de réseau de neurones facilement décrite, à savoir la profondeur du modèle d'apprentissage. Décrire un bon système de modèle a été exécuté avant, est d'abord converti en un graphique de flux de données (flux de données graphique). Dans le diagramme de flux de données, un noeud est une des opérations de la matrice spécifique (à savoir l'opérateur, tel que le sigmoïde, Matrix Multiplication, etc.), tandis que les noeuds connectés à des côtés différents de l'opération est l'entrée du noeud et de la matrice de sortie. Ce graphe de flux de données peut également être considérée comme une profondeur intermédiaire de l'expression de calcul d'apprentissage. Ensuite, le système d'apprentissage en profondeur arrière-plan recensera les flux de données des diagrammes pour effectuer efficacement le matériel réel, et la plupart optimisation au niveau du système est terminé à ce stade.

formation d'apprentissage accéléré en profondeur distribué

Le principal goulot d'étranglement dans la formation distribuée que les frais généraux de communication entre plusieurs machines. Aujourd'hui, la technologie du matériel de réseau informatique ont fait de grands progrès, (accès à distance Direct Memory, qui est une technologie de réseau matériel, qui fournit l'ordinateur sur une machine distante sans nécessiter d'intervention du processeur lors de l'accès mémoire à distance) de InfiniBand carte réseau RDMA a été il peut fournir la bande passante du réseau et la transmission retard de 50 microsecondes ~ 100Gbps. À l'heure actuelle, beaucoup d'apprentissage en profondeur pour le cluster GPU de l'application cible ont déployé un tel réseau. Cependant, la profondeur de l'apprentissage comment le système peut utiliser pleinement de bonnes capacités de communication fournis par la formation du matériel distribué pour une plus grande amélioration des performances il? De plus, en utilisant le logiciel d'interface de communication RDMA pour contourner la pile de protocole TCP / IP, ce qui réduit les frais généraux de l'exécution d'un mode noyau du système d'exploitation. Avec le soutien de la technologie de communication un tel réseau, et les calculs relatifs aux frais de traitement de communication deviendra très important, qui est ce mécanisme de communication de nombreux réseau basé à l'origine TCP / IP et la conception des problèmes.

RPC (Remote Procedure Call, appel de procédure distante) est une des primitives de communication entre plusieurs machines abstraites est largement utilisé, ses objectifs de conception principaux sont universels. RDMA sans tenir compte de la profondeur de plusieurs cadre d'apprentissage utilisera le mécanisme RPC (par exemple GRPC) pour permettre une communication entre plusieurs machines. Cependant, le RPC a besoin de maintenir un cache privé internes, qui devaient copier des données entre l'introduction de la mémoire tampon interne et les données utilisateur. Cette mémoire copie en tête dans le cas d'utilisation de réseau RDMA deviendra très évident. Nous avons observé par le micro-indice de référence, par rapport à l'utilisation du protocole TCP / IP basée à GRPC, transmis directement via l'interface de messages RDMA (messages de tailles différentes) peuvent être de 2 à 10 fois la performance.

Donc, pour l'apprentissage de la profondeur de charge de l'application comment faire une meilleure utilisation de la capacité du matériel RDMA? Tout d'abord, nous analysons les caractéristiques de l'apprentissage en profondeur de plusieurs applications:

1) Etude de profondeur Tensor calculée la plus importante structure de données, une quantité importante de temps de calcul est passé sur le traitement de Tensor. Tensor est une structure de données relativement simple, composée principalement de méta-données et une charge utile de deux parties. La charge utile est l'élément de base de la matrice, et les méta-données sont Tensor informations de forme, à savoir les dimensions et la taille de chaque dimension. Cette structure simple au moment de la transmission de données ne nécessitent pas vraiment sérialisation complexe et la fonction de désérialisation.

2) Dans quelques cas, tout à fait, Tensor est dense, et sa taille est relativement importante, c'est-à-dire dans une telle transmission en temps Tensor n'a pas besoin d'être lot supplémentaire.

3) Procédé de formation d'apprentissage de profondeur est itératif. Chaque itération de traitement d'un mini-lot. Entre différentes itérations, diagrammes de flux de données, et un grand nombre Tensor d'informations de forme ne change pas, et bon nombre des informations de forme doit être déterminée statiquement avant l'exécution.

Nous pouvons réaliser plusieurs caractéristiques basées sur l'analyse ci-dessus des flux de données diagramme, Tensor peut trouver les informations de forme statiquement déterminée, de sorte que avant l'opération, l'espace mémoire attribué précédemment RDMA accessible à l'extrémité de réception, il peut être approprié et adresse d'accès à distance transmis à l'expéditeur. Ainsi, pendant le fonctionnement, l'émetteur peut demander un transfert unilatéral Tensor RDMA des données directement à l'extrémité de réception, de ce fait évitant complètement la copie de mémoire supplémentaire ne sont pas nécessaires pour atteindre le processus de communication sans copie. Nous appelons ces expériences de mécanisme sur tensorflow, et par rapport basé sur GRPC TCP / IP, cette méthode sur une gamme de modèles typiques ont permis une amélioration de la performance des temps. Et même pour RDMA optimisé GRPC par rapport à notre méthode, il est encore en mesure d'atteindre plus de 50 pour cent d'amélioration de la performance.

En outre, une autre question, nous nous concentrons sur la direction de la profondeur distribuée apprend comment ressource automatiquement les diagrammes de flux de données indépendantes font l'optimisation de l'exécution distribuée, qui est automatiquement diviser les tâches informatiques dans le graphe de flux de données et attribuer le approprié le calcul des ressources afin d'optimiser l'efficacité de calcul. L'équipe Jeff Dean dans cette direction de Google a été bien fait un travail de pionnier. Mais limité au modèle autonome et l'environnement d'exploitation parallèle multi-cartes, actuellement il est encore une direction très importante et prometteuse, nécessite une combinaison de données en parallèle, des environnements distribués et hétérogènes à prendre en compte.

unité de calcul de l'efficacité de l'opération de levage à l'unité

Comme mentionné précédemment, en utilisant l'algorithme de modèle cadre d'apprentissage en profondeur mis en uvre avant que le temps d'exécution est converti en un flux de données figure. De nombreux modèles ont des applications pratiques sont très complexes, ils sont convertis en des flux de données diagramme est généralement composé de milliers d'opérations d'un nud, qui contient beaucoup de très petite quantité de nuds de calcul, à savoir leur entrée la petite taille de la matrice, ou est une complexité de calcul logique est très faible par rapport à la complexité des données d'entrée est accessible. Un grand nombre de ces opérations, le noeud suivant introduira un certain nombre de frais généraux d'exécution, et cette surcharge peut être important.

1) La nécessité de planifier l'exécution d'une dépendance de données de noeud de flux noeuds graphique système d'apprentissage de profondeur est en cours d'exécution. Tête de noeud de fonctionnement et la programmation de chaque noeud et la quantité calculée de non directement liée à la taille, de sorte que pour le calcul du diagramme de nombreuses petites d'écoulement comprenant des noeuds de service, le gestionnaire de réseau apportera la tête est relativement important;

2) pour le calcul de l'exécution sur le processeur graphique, la mise en uvre de chaque noeud correspond à l'opération de la fonction de noyau d'un GPU, et chaque exécution de la fonction de noyau est appelé à démarrer la CPU nécessite des pilotes graphiques, donc apportant souvent magnitude les frais généraux. Le coût de la réalisation d'une petite quantité de calcul par rapport à la fonction du noyau est très claire;

3) une petite quantité de noeud d'opération de calcul est souvent difficile de creuser suffisamment le parallélisme de données, et ne peut donc pas utiliser pleinement les ressources informatiques dans le matériel du processeur.

L'idée principale de résoudre ce problème est la fusion de noyau (Kernel Fusion). Quelques optimisations manuelles sur l'utilisation de cette idée, comme les fonctions de la bibliothèque CuDNN RNN. NVIDIA base Ce cycle complet réseau de neurones en fonction du noyau de GPU, en obtenant ainsi une très bonne performance. Cependant, il est aussi très évident lacunes, il est moins souple et polyvalent, ne peut pas être appliquée dans d'autres réseaux ou réseau de neurones récurrent dans un certain nombre de variantes. Et nous sommes plus préoccupés par la façon de mettre en uvre automatiquement optimisé pour tout modèle de réseau dans le système d'apprentissage en profondeur.

À l'heure actuelle dans le monde universitaire et l'industrie utilise déjà un code noyau du système compilé méthode pour générer la fusion, tels que TVM, Halide Taco et ainsi de suite. Ces systèmes utilisent Tensor la représentation algèbre comme une extrémité avant, peut être compilé chaque Tensor expression Algèbre à son tour en un code du noyau correspondant. Tenseur Algèbre et peut être exprimée comme la couche intermédiaire est le système d'apprentissage inférieur intégré dans la profondeur, qui est un schéma de données de haut niveau de flux peut être converti en un bloc de code comprenant Tensor Algebra-expression, et être ensuite compilés dans le code exécutable . Cependant, ces systèmes peuvent être fusionnés à l'exploitation d'un nombre de noeuds de limites, pas bien pluralité d'opérations ponctuelles de non-fusion, par exemple une pluralité d'opérations de multiplication de matrice. Cependant, si nous brisons cette limite afin de trouver la fusion Plus nud Actions peut apporter plus importante amélioration de la performance.

Une pluralité d'opérations ponctuelles de non-fusion dans l'environnement de fonctionnement du processeur graphique peut être difficile, car l'entrée ponctuelle non-fonctionnement de chaque élément des valeurs d'élément de matrice peut dépendre d'un certain nombre de différentes positions avant le fonctionnement de la matrice de sortie, donc entre ces deux opérations doivent insérer des primitives de synchronisation barrière. Atteint dans les blocs GPU barrière doivent veiller à ce que tous les fils du noyau lors de l'exécution est de rester actif, ce qui signifie que nous devons demander au noyau après l'intégration de l'utilisation d'un nombre limité de blocs de fil, mais en même temps être capable de gérer beaucoup plus qu'un fil numéro de bloc de blocs de données.

Pour résoudre ce problème, nous essayons de filetage modèle de bloc-fil persistant, qui est de commencer un nombre fixe de blocs de fil tout au long du cycle de vie du noyau fondu et les garder actifs. Nous optimiser le système dans le processus de production de code de noyau de fusion dans un problème solution d'emballage similaire (bin-pack) que le fonctionnement de chaque graphe de flux de sous-données de noeuds à être fusionnée dans le bloc de données à traiter affecté à l'approprié blocs de filière active, de sorte que la charge de chacun des blocs de filet le plus uniformément possible, et le maintien de noeud d'opération arithmétique de parallélisme dans les données d'origine graphe de flux.

Afin de générer optimisée fonction noyau GPU, une considération importante est la division rationnelle des blocs de fil et des blocs de données. Toutefois, cela dépend à son tour un certain nombre de facteurs complexes, tels que le fonctionnement opération de noeud et accès à la mémoire pour calculer le rapport de complexité, la taille de la mémoire partagée de la GPU, et le procédé de distribution de taille de fichier de registre et analogues. Par conséquent, le meilleur choix est une décision difficile par la méthode statique. Heureusement, l'apprentissage en profondeur itérative et la nécessité d'un grand nombre d'itérations pour fonction de Converge nous permet de tirer parti du début du processus itératif pour recueillir des informations dynamiquement lors de l'exécution afin d'optimiser le système d'aide à prendre des décisions éclairées.

les contraintes de ressources Overcome mémoire de l'appareil

Taille de la mémoire de l'appareil limite souvent la taille du modèle qui peut être traité, pour résoudre ce problème une idée est de compresser le modèle et quantifié. Aujourd'hui, le monde universitaire et l'industrie ont eu beaucoup de travail présente de recherche différentes compression et méthodes quantitatives, cependant, l'utilisation de la compression et de quantifier le scénario d'application réelle est encore un processus itératif fastidieux. Dans ce processus, l'utilisateur peut essayer les aspects suivants seront effectués.

1) différentes méthodes de compression. Par exemple, après les valeurs des paramètres de modèle, selon que ou proche de zéro, ou de le transformer en une sorte de valeur contribution proche de zéro? Lorsque la compression est pas nécessairement considéré structuré (si elle est pour le GPU, vous devrez peut-être comprimé dans une matrice clairsemée bloc pour améliorer l'efficacité opérationnelle)? Le but est de quantifier la valeur de la gamme moyenne sur la base de division ou de regroupement sur la base de certains de fracture?

2) le degré de compression différent. Pour envisager de faire des paramètres de compression sur la couche de neurones qui, depuis pas tout le modèle de couche comprimée est sensible à l'effet de la même; sélectionner différents rapports de compression, ou le nombre de bits de quantification.

3) Afin de maintenir le modèle à atteindre encore de bons résultats à taux de compression élevé, le processus de compression peut avoir besoin d'être progressive, comme une compression de 10%, et une nouvelle formation, répétez ce processus jusqu'à ce que vous obtenez le taux de compression cible. Donc, chaque fois que le taux de compression est un paramètre de processus graduel doivent être ajustés.

De toute évidence, un tel processus lourd nécessite un bon outil pour le rendre facile. Ceci est aussi une question de notre groupe est concerné. Nous essayons de développer API tensorflow pour permettre aux utilisateurs de contrôler directement la quantification et les méthodes de compression, des objets, et le degré de script modèle de processus.

La compression est souvent utilisée pour quantifier et à la détermination des performances et de faibles ressources mémoire lors du déploiement d'un modèle, mais une idée de résolution modèle de formation n'est pas problème de suffisamment de mémoire est de changer la mémoire informatique. Par exemple, si l'on calcule la quantité de fonctionnement du noeud dans les données diagramme de flux est faible, mais une grande quantité de résultats intermédiaires de la sortie de données, une meilleure approche est de ne pas enregistrer les résultats intermédiaires dans la mémoire, et plus tard il est utilisé, lorsque ré-effectuer le calcul de ce noeud d'opération. Bien sûr, il recalculé ou introduit certains frais généraux.

En fait, il existe une autre idée de résoudre ce problème, dans une large données d'entrée sont stockées dans la mémoire principale sur le côté de l'unité centrale, et pour réaliser le fonctionnement du traitement du noeud en continu, une grande partie des données d'entrée copiée dans GPU dispositif de mémoire, en copiant et asynchrone segmenté de telle sorte que chaque segment est calculée et la prochaine fois que le temps de copie peut être empilé de manière à cacher les données de la copie au-dessus. Pour une telle opération de multiplication de matrice, la complexité de calcul depuis un accès à la mémoire plus élevée par rapport au degré de complexité, quand un grand segment, et le temps de calcul du temps de copie est chevauchement parfait. Toutefois, si l'opération à effectuer pas la multiplication de la matrice, mais certaines opérations simples ponctuelles, la complexité de calcul et une copie de la mémoire est aucun moyen de compenser le coût. Donc, ce besoin d'approche pour maintenir l'intégration du noyau combiné. Telles que la multiplication matricielle et les opérations d'intégration ponctuelle subséquente, sont calculées pour chaque segment de la matrice segmentée de la multiplication point par point et les opérations sont effectuées, puis un retraitement à côté du segment.

Ceux-ci pensent et groupe de recherche informatique hétérogène à Microsoft Research Asia dans les problèmes d'optimisation du cadre du système d'apprentissage profondeur, nous espérons promouvoir davantage le développement de l'apprentissage en profondeur et de l'intelligence artificielle, même au niveau du système. De plus, nous nous concentrons également sur la façon d'utiliser du matériel sur mesure (comme la puce FPGA et ASIC) pour accélérer le calcul de la profondeur de l'apprentissage, ainsi que la façon de concevoir un cadre pour une performance optimale dans un environnement matériel hétérogène, bienvenue à ces recherches les étudiants intéressés à se joindre à nous, s'il vous plaît envoyez votre CV à la boîte aux lettres miw@microsoft.com.

A propos de l'auteur

Wu Ming, chercheur principal à Microsoft Research Asia. En 2007, à l'Institut de l'informatique a rejoint Microsoft Research Asia après un doctorat en architecture informatique réalisée. Le principal intérêt de la recherche et la participation au cours intérêts de recherche comprennent les systèmes distribués de traitement des transactions, de calcul et schéma artificiel de la plate-forme de moteur d'intelligence. Au cours des dernières années dans le domaine de haut niveau répondant plusieurs systèmes (tels que SOSP, OSDI, INDS, ATC, EuroSys, socc, VLDB, etc.) dans les documents publiés, et servi OSDI, ASPLOS, HotDep, réunions du comité de programme Middleware, etc., et publication SOSP'17 le président.

[] Joignez-vous à la communauté

Ji-won nouvelles technologies AI + industrie du recrutement communautaire, a accueilli les étudiants + industrie de la technologie AI a atterri intérêt, plus Little Helper Micro Signal: aiera2015_3  Dans le groupe, si elle est approuvée seront invités dans le groupe, assurez-vous de modifier les commentaires après avoir rejoint un groupe communautaire (Nom - Société - emploi, groupe professionnel d'examen plus rigoureux, s'il vous plaît comprendre).

situation folle, la chose la plus importante à maîtriser l'équilibre
Précédent
L'argent du Nouvel An de ne pas donner? Combien pour? Et quand ils donnent? Qui devrait contrôler? Nous avons appris ah!
Prochain
Louer une petite bicyclette, à cheval le plus cool Route Pays-Bas Fleur 4
« L'article lu » la profondeur de l'accélération du réseau de neurones et de compression nouveau rapport d'avancement annuel
Restez en avance sur ces codes filmant la Terre Sainte, je suis sorti pour prendre un hein Neat gratuit!
Les parties ne se battent pas, ne se battent pas faire face à un combat! carte Fishbone ne pas boire du vinaigre! Ceci est un souhait de l'an d'un médecin ......
Rui Xin VS Cowarts: Rebirth en fatiguées, le coût enlisé dans
Vous regardez la plupart appelé la beauté, ces lieux sont le paradis sur terre!
style turc Fam domestique, non seulement aux États-Unis, mais aussi gratuit, super adapté pour prendre des photos!
ABC Roundup: Pékin avant d'aborder quatre grammes de Liaoning, Xinjiang Guangsha leader huitième, Shanghai forte rattrapage
Voyage Fête du Printemps à l'étranger d'être vigilant, attentif surprises sont effrayés!
articles scientifiques chinois ordinateur publié a révélé la plupart des universités, l'Université de Tsinghua, l'Université du Zhejiang, l'Université nationale Chiao Tung sur les trois premiers
2017 Acura NSX version hybride: encore EGL Ferrari, mais aussi pour acheter la nourriture Gospel
Les dernières exigences de photo de visa national!