J'ai regardé certains des packages de la vue de tâche High perf traitant des calculs GPU, et étant donné que la plupart des GPU semblent être d'un ordre de grandeur plus forts pour effectuer des calculs arithmétiques en simple précision que ceux DP , je me demandais:
- Pourquoi aucun des packages ne donne plus de contrôle à l'utilisateur sur le type de précision requis? Je peux voir de nombreuses applications dans les statistiques où les arithmétiques SP (c'est-à-dire codées avec une précision à 7 chiffres) sont assez bonnes pour une utilisation pratique (si je surestime les gains impliqués, faites-le moi savoir).
- Python est-il plus flexible à ce sujet? Si oui, pourquoi ? Je ne vois pas pourquoi l'absence d'un type `` unique '' dans R rendrait impossible l'inclusion d'une telle option (avec un avertissement) dans, disons, GPUtools ou magma (bien que je serais heureux de me tromper).
PS: je pense spécifiquement aux applications où les nombres sont déjà dimensionnés et centrés (de sorte que l' inégalité de Chebychev est contraignante) dimensionnellement.
Réponses:
D'après le fichier d'aide de GPUtools , il semble que ce
useSingle=TRUE
soit la valeur par défaut pour les fonctions.la source
la source
Je suppose que par programmation GPU, vous voulez dire la programmation de cartes NVIDIA? Dans ce cas, les appels de code sous-jacents depuis R et python sont vers C / CUDA .
La raison simple pour laquelle une seule précision est offerte est que c'est ce que la plupart des cartes GPU prennent en charge.
Cependant, la nouvelle architecture nvidia Fermi prend en charge la double précision. Si vous avez acheté une carte graphique nvidia cette année, c'est probablement un Fermi. Même ici, les choses ne sont pas simples:
Pour répondre à la question dans votre titre, "La précision simple est-elle OK?", Cela dépend de votre application (désolé réponse merde!). Je suppose que tout le monde utilise maintenant la double précision, car cela ne donne plus de résultats.
Quand j'ai essayé les GPU, la programmation est soudainement devenue beaucoup plus compliquée. Vous devez vous soucier de choses comme:
la source
useSingle=TRUE
semble être la valeur par défaut dans les fonctions. Est-ce que j'ai râté quelque chose?La grande majorité des GPU en circulation ne prennent en charge que la virgule flottante simple précision.
En ce qui concerne la question du titre, vous devez regarder les données que vous manipulerez pour déterminer si la précision simple vous suffit. Souvent, vous constaterez que les célibataires sont parfaitement acceptables pour> 90% des données que vous gérez, mais échoueront spectaculairement pour les 10% restants; sauf si vous avez un moyen facile de déterminer si votre ensemble de données particulier échouera ou non, vous êtes bloqué en utilisant la double précision pour tout.
la source
OK, une nouvelle réponse à une vieille question mais encore plus pertinente maintenant. La question que vous posez concerne la précision finie, normalement le domaine de l'analyse du signal et des mathématiques expérimentales.
Les flotteurs à double précision (DP) nous permettent de prétendre qu'il n'existe pas de problèmes de précision finie, comme nous le faisons avec la plupart des problèmes mathématiques du monde réel. En mathématiques expérimentales, il n'y a pas de faux semblant.
Les flotteurs à simple précision (SP) nous obligent à considérer le bruit de quantification. Si nos modèles d'apprentissage automatique rejettent intrinsèquement le bruit, comme les réseaux de neurones (NN), les réseaux de convolution (CNN), les réseaux résiduels (ResN), etc., alors SP donne le plus souvent des résultats similaires à DP.
Les flotteurs à demi-précision (HP) (désormais pris en charge dans la boîte à outils cuda 7.5) nécessitent la prise en compte des effets de quantification (bruit et arrondi). Très probablement, nous verrons bientôt des flotteurs HP dans les boîtes à outils d'apprentissage automatique courantes.
Il existe des travaux récents pour créer des calculs de précision inférieure dans des flottants ainsi que des nombres de précision fixes. L'arrondi stochastique a permis à la convergence de fonctionner avec les CNN tandis que la solution diverge sans elle. Ces articles vous aideront à améliorer votre compréhension des problèmes liés à l'utilisation de nombres à précision finie dans l'apprentissage automatique.
Pour répondre à vos questions:
SP n'est pas si mal. Comme vous le faites remarquer, c'est deux fois plus rapide, mais cela vous permet également de mettre plus de couches en mémoire. Un avantage est d'économiser des frais généraux pour obtenir des données sur et hors du GPU. Les calculs plus rapides et les frais généraux inférieurs entraînent des temps de convergence plus courts. Cela dit, HP, pour certains problèmes, sera meilleur dans certaines parties du réseau et pas dans d'autres.
Notez que la tendance dans les réseaux de neurones est maintenant d'aller avec des couches très profondes, avec des exécutions de plus de quelques jours sur les clusters de GPU les plus rapides.
la source