Compétence de Triage des Problèmes PyTorch
Cette compétence aide au triage des problèmes GitHub en routant les problèmes, en appliquant des étiquettes et en laissant des réponses de première ligne.
Contenus
- Outils MCP disponibles
- Étiquettes à JAMAIS ajouter
- Étapes du triage des problèmes
- Étape 0 : Déjà routé — IGNORER
- Étape 1 : Question vs Bug/Fonctionnalité
- Étape 1.5 : Reproduction nécessaire — Fichiers externes
- Étape 2 : Transfert
- Étape 2.5 : Problèmes PT2 — Gestion spéciale
- Étape 3 : Rediriger vers l'oncall secondaire
- Étape 4 : Étiqueter le problème
- Étape 5 : Haute priorité — NÉCESSITE UNE VÉRIFICATION HUMAINE
- Étape 6 : bot-triaged (automatique)
- Étape 7 : Marquer comme trié
- Contraintes V1
Référence des étiquettes : Consultez labels.json pour le catalogue complet des étiquettes appropriées pour le triage. N'appliquez QUE les étiquettes qui existent dans ce fichier. N'inventez pas et ne devinez pas les noms d'étiquettes. Ce fichier exclut les déclencheurs CI, les configs de test, les notes de version, les étiquettes dépréciées et les étiquettes nécessitant une décision humaine.
Guide de triage PT2 : Consultez pt2-triage-rubric.md pour des conseils détaillés sur l'étiquetage lors du triage des problèmes PT2/torch.compile.
Modèles de réponse : Consultez templates.json pour les messages de réponse standard.
Outils MCP disponibles
Utilisez ces outils GitHub MCP pour le triage :
| Outil | Objectif |
|---|---|
mcp__github__issue_read |
Obtenir les détails du problème, les commentaires et les étiquettes existantes |
mcp__github__issue_write |
Appliquer des étiquettes ou fermer les problèmes |
mcp__github__add_issue_comment |
Ajouter un commentaire (uniquement pour rediriger les questions) |
mcp__github__search_issues |
Trouver des problèmes similaires pour le contexte |
Étiquettes à JAMAIS ajouter
| Préfixe/Catégorie | Raison |
|---|---|
Étiquettes absentes de labels.json |
N'appliquez que les étiquettes qui existent dans la liste blanche |
ciflow/* |
Déclencheurs de tâches CI pour les PR uniquement |
test-config/* |
Sélecteurs de suite de tests pour les PR uniquement |
release notes: * |
Auto-assignée pour les notes de version |
ci-*, ci:* |
Contrôles d'infrastructure CI |
sev* |
Les étiquettes de sévérité nécessitent une décision humaine |
merge blocking |
Nécessite une décision humaine |
actionable |
Nécessite une décision humaine |
| Toute étiquette contenant « deprecated » | Obsolète |
oncall: releng |
Pas une cible de redirection de triage. Utilisez module: ci à la place |
Si bloqué : Quand une étiquette est bloquée par le hook, ajoutez UNIQUEMENT triage review et arrêtez. Un humain s'en chargera.
Ces règles sont appliquées par un hook PreToolUse qui valide toutes les étiquettes par rapport à labels.json.
Ne jamais remplacer les étiquettes humaines
Si un humain a déjà appliqué des étiquettes (en particulier ci: sev, des étiquettes de sévérité ou des étiquettes de priorité), ne les supprimez pas et ne les remplacez pas. Votre travail est de compléter, pas de remplacer.
Étapes du triage des problèmes (pour chaque problème)
0) Déjà routé — IGNORER
Si un problème a DÉJÀ une étiquette oncall:, IGNOREZ-LE entièrement. Ne :
- Ajoutez aucune étiquette
- Ajoutez
triaged - Laissez des commentaires
- Faites aucun travail de triage
Ce problème appartient à l'équipe sous-oncall. Ils gèrent leur queue.
1) Question vs Bug/Fonctionnalité
- Si c'est une question (pas un rapport de bug ou une demande de fonctionnalité) : fermez et utilisez le modèle
redirect_to_forumdepuistemplates.json. - Si vous ne savez pas si c'est un bug/fonctionnalité ou une question : demandez des informations supplémentaires avec le modèle
request_more_infoet arrêtez.
1.5) Reproduction nécessaire — Fichiers externes
Vérifiez si le corps du problème contient des liens vers des fichiers externes que les utilisateurs devraient télécharger pour reproduire.
Modèles à détecter :
- Fichiers joints :
.zip,.pt,.pth,.pkl,.safetensors,.onnx,.bin - Stockage externe : Liens Google Drive, Dropbox, OneDrive, Mega, WeTransfer
- Hubs de modèles : Liens Hugging Face Hub vers des fichiers de modèles
Action :
- Éditer le corps du problème pour supprimer/masquer les liens de téléchargement
- Remplacer par :
[Lien supprimé - les téléchargements de fichiers externes ne sont pas autorisés pour des raisons de sécurité]
- Remplacer par :
- Ajouter l'étiquette
needs reproduction - Utiliser le modèle
needs_reproductiondepuistemplates.jsonpour demander une reproduction autonome - Ne PAS ajouter
triaged— attendez que l'utilisateur fournisse un exemple reproductible
1.55) Reproduction nécessaire — Autres cas
Ajouter aussi needs reproduction quand :
- L'utilisateur signale un problème spécifique au matériel (p. ex., un modèle GPU spécifique) sans script de repro autonome
- L'utilisateur fait référence à un modèle/checkpoint/dataset spécifique qui n'est pas exécutable publiquement en quelques lignes
- Le problème décrit un break lors de la mise à jour de version mais ne fournit qu'une description haut niveau sans un script minimal
- La repro dépend d'une configuration d'entraînement spécifique, d'un environnement distribué ou d'une infrastructure non triviale
1.6) Cas limites et précision numérique
Si le problème implique des valeurs extrêmes ou des différences de précision numérique :
Modèles à détecter :
- Valeurs près de
torch.finfo(dtype).maxoutorch.finfo(dtype).min - NaN/Inf apparaissant dans les sorties d'entrées valides (mais extrêmes)
- Différences entre les résultats CPU et GPU
- Différences de précision entre dtypes (p. ex., fp32 vs fp16)
- Cas limites générés par fuzzer
IMPORTANT — éviter les mislabeling déclenchés par des mots-clés :
Étiquetez en fonction de la cause racine, pas des mots-clés qui apparaissent dans l'erreur ou le titre. Un mot-clé indique ce qui a échoué, pas pourquoi.
- Une erreur
undefined symbol: ncclAlltoAllàimport torchest un problème d'empaquetage (module: binaries), pas un bug d'entraînement distribué — l'utilisateur n'a jamais exécuté de code distribué. - Un
nandans le nom d'un paramètre ou une vérification de tolérance n'est pasmodule: NaNs and Infssauf si le bug traite réellement de la propagation des NaN. - Une stack trace mentionnant
autogradne signifie pasmodule: autograd— vérifiez si le bug est dans autograd lui-même ou juste sur le chemin d'appel. - Une défaillance de test avec des seuils de tolérance est
module: tests, pasmodule: numerical-stability.
Posez-vous la question : « Où la correction devrait-elle être faite ? » Cela détermine l'étiquette.
Action :
- Ajouter l'étiquette
module: edge cases - Si provenant d'un fuzzer, ajouter aussi
topic: fuzzer - Utiliser le modèle
numerical_accuracydepuistemplates.jsonpour lier vers la documentation - Si le problème est clairement un comportement attendu selon la documentation, fermez-le avec le commentaire du modèle
2) Transfert (bibliothèque de domaine ou ExecuTorch)
Si le problème appartient à un autre dépôt (vision/texte/audio/RL/ExecuTorch/etc.), transférez le problème et ARRÊTEZ.
2.5) Problèmes PT2 — Gestion spéciale
PT2 n'est PAS une redirection. oncall: pt2 n'est pas comme les autres étiquettes oncall de l'étape 3. Les problèmes PT2 continuent à travers les étapes 4–7 pour un triage complet — ajouter oncall: pt2, puis procéder à l'étiquetage avec des étiquettes module:, marquer triaged, etc.
Chaque problème oncall: pt2 DOIT avoir au moins une étiquette module:. La queue d'oncall PT2 est trop large sans étiquette de module — l'équipe doit savoir quel composant est affecté (p. ex., module: dynamo, module: inductor, module: helion, module: dynamic shapes). Si vous ne pouvez pas déterminer le module spécifique, utilisez module: compile ux comme recours, mais essayez toujours d'être spécifique d'abord. Consultez pt2-triage-rubric.md pour des conseils détaillés.
3) Rediriger vers l'oncall secondaire
CRITIQUE : Quand redirigeant vers une queue oncall non-PT2, appliquez exactement une étiquette oncall: ... et ARRÊTEZ. Ne :
- Ajoutez aucune étiquette
module: - Ne le marquez pas
triaged - Ne faites aucun travail de triage supplémentaire
L'équipe sous-oncall gérera son propre triage. Votre travail est uniquement de la router vers eux.
Étiquettes de redirection oncall
| Étiquette | Quand l'utiliser |
|---|---|
oncall: jit |
Problèmes TorchScript |
oncall: distributed |
Entraînement distribué (DDP, FSDP, RPC, c10d, DTensor, DeviceMesh, mémoire symétrique, parallélisme contextuel, pipelining). Gestion spéciale : après application de cette étiquette, invoquez la sous-compétence de triage distribué (/distributed-triage sur ce problème) pour un triage de second niveau — elle routera vers une sous-oncall, ajoutera des étiquettes de module, et marquera triaged. |
oncall: export |
Problèmes torch.export |
oncall: quantization |
Problèmes de quantization |
oncall: mobile |
Mobile (iOS/Android), exclut ExecuTorch |
oncall: profiler |
Problèmes de profiler (CPU, GPU, Kineto) |
oncall: visualization |
Intégration TensorBoard |
Erreurs de routage courantes à éviter :
- MPS ≠ Mobile. MPS (Metal Performance Shaders) est le backend GPU de macOS/Apple Silicon. Ne routez PAS les problèmes MPS vers
oncall: mobile. Les problèmes MPS restent dans la queue générale avecmodule: mps. - DTensor →
oncall: distributed. Les problèmes DTensor doivent toujours être routés versoncall: distributed, même s'ils ne mentionnent pas DDP/FSDP. - ONNX →
module: onnx. Il n'y a pas d'oncall: onnx. Utilisezmodule: onnxet gardez dans la queue générale. - CI/releng →
module: ci. N'utilisez pasoncall: releng. Utilisezmodule: cipour les problèmes d'infrastructure CI. - torch.compile + distribué. Quand
torch.compilemaltraite une op distribuée (p. ex.,dist.all_reduce), le problème a généralement besoin à la fois deoncall: pt2etoncall: distributedcar la correction peut s'étendre sur les deux codebases.
Note : oncall: cpu inductor est une sous-queue de PT2. Pour le triage général, utilisez simplement oncall: pt2.
4) Étiqueter le problème (s'il n'est PAS transféré/redirigé)
Uniquement si le problème reste dans la queue générale :
- Ajouter 1+ étiquettes
module: ...basées sur la zone affectée - Préférer les étiquettes spécifiques aux générales quand les deux existent. Consultez les descriptions dans
labels.jsonpour savoir quand une étiquette spécifique remplace une générale (p. ex.,module: sdpaà la place demodule: nnpour les problèmes SDPA,module: flex attentionau lieu demodule: nnpour flex attention). feature— une fonctionnalité entièrement nouvelle qui n'existe pas aujourd'hui sous aucune formeenhancement— amélioration de quelque chose qui fonctionne déjà (p. ex., ajouter un kernel de backend natif pour une op qui s'exécute déjà via fallback/composite, optimisation de performance, meilleurs messages d'erreur). Si l'enhancement concerne la performance, ajouter aussimodule: performance.function request— une nouvelle fonction ou de nouveaux arguments/modes pour une fonction existante- Si le problème dit que l'opération « fonctionne actuellement » ou « bascule vers » un chemin plus lent, c'est
enhancement, pasfeature
Étiquettes couramment oubliées — vérifiez toujours celles-ci :
| Condition | Étiquette |
|---|---|
| Segfault, accès mémoire illégal, SIGSEGV | module: crash |
| Problème de performance : régression, ralentissement ou demande d'optimisation | module: performance |
| Problème sur Windows | module: windows |
| Fonctionnalité qui fonctionnait précédemment maintenant cassée | module: regression |
| Documentation/liens cassés qui fonctionnaient précédemment | module: docs + module: regression (PAS enhancement) |
| Problème concernant un test qui échoue (pas la fonctionnalité sous-jacente) | module: tests |
| Bug de passage arrière/calcul de gradient | module: autograd (en plus de l'étiquette de module de l'op) |
Ops torch.linalg ou ops d'algèbre linéaire (solve, svd, eig, inv, etc.) |
module: linear algebra |
has workaround |
N'ajouter que quand le workaround est non-trivial et non-évident. Si le problème est « X ne fonctionne pas pour les tenseurs non contigus », appeler .contiguous() est l'inverse tautologique du bug, pas un workaround. Un vrai workaround est quelque chose comme installer une version spécifique du package, ajouter un point de synchronisation, insérer gc.collect(), ou utiliser une API différente qui n'est pas évidemment impliquée par la description du bug. |
Étiquetez selon le bug réel, pas les mots-clés. Lisez le problème pour comprendre ce qui est réellement cassé. Un bug sur le broadcasting qui mentionne par hasard « nan » dans un nom de paramètre est un bug frontend, pas un bug NaN/Inf.
5) Haute priorité — NÉCESSITE UNE VÉRIFICATION HUMAINE
CRITIQUE : Si vous pensez qu'un problème est de haute priorité, vous DEVEZ :
- Ajouter l'étiquette
triage reviewet ne pas ajoutertriaged
N'ajoutez PAS directement high priority sans confirmation humaine.
Critères de haute priorité :
- Crash/segfault/accès mémoire illégal
- Problème de correction silencieuse (résultats incorrects sans erreur)
- Régression par rapport à une version antérieure
- Défaillance d'assert interne
- Nombreux utilisateurs affectés
- Impact sur un composant principal ou un modèle populaire
6) bot-triaged (automatique)
L'étiquette bot-triaged est automatiquement appliquée par un post-hook après toute mutation de problème. Vous n'avez pas besoin de l'ajouter manuellement.
7) Marquer comme trié
Si non transféré/redirigé et non signalé pour vérification, ajouter triaged.
Contraintes V1
NE PAS :
- Fermer automatiquement les rapports de bugs ou demandes de fonctionnalité
- Fermer les problèmes sauf s'ils sont des questions d'utilisation claires selon l'étape 1
- Assigner les problèmes à des utilisateurs
- Ajouter
high prioritydirectement sans confirmation humaine - Ajouter des étiquettes de module lors de la redirection vers oncall
- Ajouter des commentaires aux rapports de bugs ou demandes de fonctionnalité, sauf une seule demande d'info quand la classification n'est pas claire
FAIRE :
- Fermer les questions d'utilisation claires et pointer vers discuss.pytorch.org (selon l'étape 1)
- Être conservateur - en cas de doute, ajouter
triage reviewpour l'attention humaine - Appliquer les étiquettes de type (
feature,enhancement,function request) quand confiant - Ajouter l'étiquette
triagedquand la classification est complète
Note : bot-triaged est automatiquement appliquée par un post-hook après toute mutation de problème.