aigroup-workflow 2.2.0 → 2.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/commands/fix-build.md +10 -5
- package/.claude/commands/init-project.md +13 -8
- package/.claude/commands/plan.md +15 -8
- package/.claude/commands/review.md +12 -6
- package/.claude/commands/tdd.md +11 -5
- package/.claude/commands/workflow-start.md +20 -11
- package/.claude/settings.json +28 -0
- package/.codex/agents/architect.toml +207 -0
- package/.codex/agents/build-error-resolver.toml +110 -0
- package/.codex/agents/code-reviewer.toml +233 -0
- package/.codex/agents/doc-updater.toml +103 -0
- package/.codex/agents/e2e-runner.toml +103 -0
- package/.codex/agents/get-current-datetime.toml +23 -0
- package/.codex/agents/init-architect.toml +181 -0
- package/.codex/agents/planner.toml +208 -0
- package/.codex/agents/refactor-cleaner.toml +81 -0
- package/.codex/agents/rust-reviewer.toml +90 -0
- package/.codex/agents/security-reviewer.toml +104 -0
- package/.codex/agents/tdd-guide.toml +87 -0
- package/AGENTS.md +2 -2
- package/CLAUDE.md +23 -1
- package/LICENSE +20 -20
- package/README.md +333 -333
- package/agents/a11y-architect.md +141 -141
- package/agents/architect.md +211 -211
- package/agents/build-error-resolver.md +114 -114
- package/agents/chief-of-staff.md +151 -151
- package/agents/code-architect.md +71 -71
- package/agents/code-explorer.md +69 -69
- package/agents/code-reviewer.md +237 -237
- package/agents/code-simplifier.md +47 -47
- package/agents/comment-analyzer.md +45 -45
- package/agents/conversation-analyzer.md +52 -52
- package/agents/cpp-build-resolver.md +90 -90
- package/agents/cpp-reviewer.md +72 -72
- package/agents/csharp-reviewer.md +101 -101
- package/agents/dart-build-resolver.md +201 -201
- package/agents/database-reviewer.md +91 -91
- package/agents/doc-updater.md +107 -107
- package/agents/docs-lookup.md +68 -68
- package/agents/e2e-runner.md +107 -107
- package/agents/flutter-reviewer.md +243 -243
- package/agents/gan-evaluator.md +209 -209
- package/agents/gan-generator.md +131 -131
- package/agents/gan-planner.md +99 -99
- package/agents/get-current-datetime.md +26 -26
- package/agents/go-build-resolver.md +94 -94
- package/agents/go-reviewer.md +76 -76
- package/agents/harness-optimizer.md +35 -35
- package/agents/healthcare-reviewer.md +83 -83
- package/agents/java-build-resolver.md +153 -153
- package/agents/java-reviewer.md +92 -92
- package/agents/kotlin-build-resolver.md +118 -118
- package/agents/kotlin-reviewer.md +159 -159
- package/agents/loop-operator.md +36 -36
- package/agents/opensource-forker.md +198 -198
- package/agents/opensource-packager.md +249 -249
- package/agents/opensource-sanitizer.md +188 -188
- package/agents/performance-optimizer.md +446 -446
- package/agents/planner.md +212 -212
- package/agents/pr-test-analyzer.md +45 -45
- package/agents/python-reviewer.md +98 -98
- package/agents/pytorch-build-resolver.md +120 -120
- package/agents/refactor-cleaner.md +85 -85
- package/agents/rust-build-resolver.md +148 -148
- package/agents/rust-reviewer.md +94 -94
- package/agents/security-reviewer.md +108 -108
- package/agents/seo-specialist.md +59 -59
- package/agents/silent-failure-hunter.md +50 -50
- package/agents/tdd-guide.md +91 -91
- package/agents/type-design-analyzer.md +41 -41
- package/agents/typescript-reviewer.md +112 -112
- package/cli/commands/update.mjs +1 -1
- package/cli/utils/scaffold.mjs +53 -0
- package/docs/rules/agents.md +166 -50
- package/docs/rules/cpp/coding-style.md +44 -44
- package/docs/rules/cpp/hooks.md +39 -39
- package/docs/rules/cpp/patterns.md +51 -51
- package/docs/rules/cpp/security.md +51 -51
- package/docs/rules/cpp/testing.md +44 -44
- package/docs/rules/csharp/coding-style.md +72 -72
- package/docs/rules/csharp/hooks.md +25 -25
- package/docs/rules/csharp/patterns.md +50 -50
- package/docs/rules/csharp/security.md +58 -58
- package/docs/rules/csharp/testing.md +46 -46
- package/docs/rules/dart/coding-style.md +159 -159
- package/docs/rules/dart/hooks.md +66 -66
- package/docs/rules/dart/patterns.md +261 -261
- package/docs/rules/dart/security.md +135 -135
- package/docs/rules/dart/testing.md +215 -215
- package/docs/rules/golang/coding-style.md +32 -32
- package/docs/rules/golang/hooks.md +17 -17
- package/docs/rules/golang/patterns.md +45 -45
- package/docs/rules/golang/security.md +34 -34
- package/docs/rules/golang/testing.md +31 -31
- package/docs/rules/java/coding-style.md +114 -114
- package/docs/rules/java/hooks.md +18 -18
- package/docs/rules/java/patterns.md +146 -146
- package/docs/rules/java/security.md +100 -100
- package/docs/rules/java/testing.md +131 -131
- package/docs/rules/kotlin/coding-style.md +86 -86
- package/docs/rules/kotlin/hooks.md +17 -17
- package/docs/rules/kotlin/patterns.md +146 -146
- package/docs/rules/kotlin/security.md +82 -82
- package/docs/rules/kotlin/testing.md +128 -128
- package/docs/rules/perl/coding-style.md +46 -46
- package/docs/rules/perl/hooks.md +22 -22
- package/docs/rules/perl/patterns.md +76 -76
- package/docs/rules/perl/security.md +69 -69
- package/docs/rules/perl/testing.md +54 -54
- package/docs/rules/php/coding-style.md +40 -40
- package/docs/rules/php/hooks.md +24 -24
- package/docs/rules/php/patterns.md +33 -33
- package/docs/rules/php/security.md +37 -37
- package/docs/rules/php/testing.md +39 -39
- package/docs/rules/python/coding-style.md +42 -42
- package/docs/rules/python/hooks.md +19 -19
- package/docs/rules/python/patterns.md +39 -39
- package/docs/rules/python/security.md +30 -30
- package/docs/rules/python/testing.md +38 -38
- package/docs/rules/rust/coding-style.md +151 -151
- package/docs/rules/rust/hooks.md +16 -16
- package/docs/rules/rust/patterns.md +168 -168
- package/docs/rules/rust/security.md +141 -141
- package/docs/rules/rust/testing.md +154 -154
- package/docs/rules/swift/coding-style.md +47 -47
- package/docs/rules/swift/hooks.md +20 -20
- package/docs/rules/swift/patterns.md +66 -66
- package/docs/rules/swift/security.md +33 -33
- package/docs/rules/swift/testing.md +45 -45
- package/docs/rules/typescript/coding-style.md +199 -199
- package/docs/rules/typescript/hooks.md +22 -22
- package/docs/rules/typescript/patterns.md +52 -52
- package/docs/rules/typescript/security.md +28 -28
- package/docs/rules/typescript/testing.md +18 -18
- package/docs/rules/web/coding-style.md +96 -96
- package/docs/rules/web/design-quality.md +62 -62
- package/docs/rules/web/hooks.md +120 -120
- package/docs/rules/web/patterns.md +79 -79
- package/docs/rules/web/performance.md +64 -64
- package/docs/rules/web/security.md +57 -57
- package/docs/rules/web/testing.md +55 -55
- package/docs/templates/README.md +36 -36
- package/docs/templates/ai-project-final.md +124 -124
- package/docs/templates/ai-project.md +105 -105
- package/docs/templates/api.md +157 -157
- package/docs/templates/bug.md +62 -62
- package/docs/templates/code-review.md +87 -87
- package/docs/templates/generic.md +116 -116
- package/docs/templates/implementation-plan.md +1 -1
- package/docs/templates/meeting.md +68 -68
- package/docs/templates/prd.md +98 -98
- package/docs/templates/ui.md +134 -134
- package/docs/workflow-pipeline.md +11 -10
- package/package.json +40 -39
- package/scripts/hooks/checks/orchestration-artifacts.cjs +28 -23
- package/scripts/hooks/checks/workflow-state.cjs +4 -5
- package/scripts/orchestration/lib/orchestrator.cjs +344 -117
- package/scripts/orchestration/lib/validate.cjs +145 -0
- package/scripts/orchestration/session.cjs +88 -44
- package/skills/SUPERPOWERS-LICENSE +21 -21
- package/skills/ai-ml/fine-tuning-expert/SKILL.md +162 -162
- package/skills/ai-ml/fine-tuning-expert/references/dataset-preparation.md +540 -540
- package/skills/ai-ml/fine-tuning-expert/references/deployment-optimization.md +673 -673
- package/skills/ai-ml/fine-tuning-expert/references/evaluation-metrics.md +597 -597
- package/skills/ai-ml/fine-tuning-expert/references/hyperparameter-tuning.md +565 -565
- package/skills/ai-ml/fine-tuning-expert/references/lora-peft.md +347 -347
- package/skills/ai-ml/ml-pipeline/SKILL.md +159 -159
- package/skills/ai-ml/ml-pipeline/references/experiment-tracking.md +833 -833
- package/skills/ai-ml/ml-pipeline/references/feature-engineering.md +631 -631
- package/skills/ai-ml/ml-pipeline/references/model-validation.md +978 -978
- package/skills/ai-ml/ml-pipeline/references/pipeline-orchestration.md +907 -907
- package/skills/ai-ml/ml-pipeline/references/training-pipelines.md +782 -782
- package/skills/ai-ml/rag-architect/SKILL.md +194 -194
- package/skills/ai-ml/rag-architect/references/chunking-strategies.md +878 -878
- package/skills/ai-ml/rag-architect/references/embedding-models.md +561 -561
- package/skills/ai-ml/rag-architect/references/rag-evaluation.md +833 -833
- package/skills/ai-ml/rag-architect/references/retrieval-optimization.md +795 -795
- package/skills/ai-ml/rag-architect/references/vector-databases.md +589 -589
- package/skills/ai-ml/spark-engineer/SKILL.md +148 -148
- package/skills/ai-ml/spark-engineer/references/partitioning-caching.md +543 -543
- package/skills/ai-ml/spark-engineer/references/performance-tuning.md +544 -544
- package/skills/ai-ml/spark-engineer/references/rdd-operations.md +599 -599
- package/skills/ai-ml/spark-engineer/references/spark-sql-dataframes.md +474 -474
- package/skills/ai-ml/spark-engineer/references/streaming-patterns.md +786 -786
- package/skills/backend/api-designer/SKILL.md +217 -217
- package/skills/backend/api-designer/references/error-handling.md +541 -541
- package/skills/backend/api-designer/references/openapi.md +824 -824
- package/skills/backend/api-designer/references/pagination.md +494 -494
- package/skills/backend/api-designer/references/rest-patterns.md +335 -335
- package/skills/backend/api-designer/references/versioning.md +391 -391
- package/skills/backend/architecture-designer/SKILL.md +117 -117
- package/skills/backend/architecture-designer/references/adr-template.md +116 -116
- package/skills/backend/architecture-designer/references/architecture-patterns.md +111 -111
- package/skills/backend/architecture-designer/references/database-selection.md +102 -102
- package/skills/backend/architecture-designer/references/nfr-checklist.md +112 -112
- package/skills/backend/architecture-designer/references/system-design.md +100 -100
- package/skills/backend/code-documenter/SKILL.md +147 -147
- package/skills/backend/code-documenter/references/api-docs-fastapi-django.md +166 -166
- package/skills/backend/code-documenter/references/api-docs-nestjs-express.md +220 -220
- package/skills/backend/code-documenter/references/coverage-reports.md +125 -125
- package/skills/backend/code-documenter/references/documentation-systems.md +333 -333
- package/skills/backend/code-documenter/references/interactive-api-docs.md +531 -531
- package/skills/backend/code-documenter/references/python-docstrings.md +121 -121
- package/skills/backend/code-documenter/references/typescript-jsdoc.md +145 -145
- package/skills/backend/code-documenter/references/user-guides-tutorials.md +530 -530
- package/skills/backend/debugging-wizard/SKILL.md +105 -105
- package/skills/backend/debugging-wizard/references/common-patterns.md +132 -132
- package/skills/backend/debugging-wizard/references/debugging-tools.md +140 -140
- package/skills/backend/debugging-wizard/references/quick-fixes.md +177 -177
- package/skills/backend/debugging-wizard/references/strategies.md +142 -142
- package/skills/backend/debugging-wizard/references/systematic-debugging.md +367 -367
- package/skills/backend/feature-forge/SKILL.md +98 -98
- package/skills/backend/feature-forge/references/acceptance-criteria.md +104 -104
- package/skills/backend/feature-forge/references/ears-syntax.md +99 -99
- package/skills/backend/feature-forge/references/interview-questions.md +150 -150
- package/skills/backend/feature-forge/references/pre-discovery-subagents.md +54 -54
- package/skills/backend/feature-forge/references/specification-template.md +103 -103
- package/skills/backend/fullstack-guardian/SKILL.md +105 -105
- package/skills/backend/fullstack-guardian/references/api-design-standards.md +307 -307
- package/skills/backend/fullstack-guardian/references/architecture-decisions.md +350 -350
- package/skills/backend/fullstack-guardian/references/backend-patterns.md +237 -237
- package/skills/backend/fullstack-guardian/references/common-patterns.md +134 -134
- package/skills/backend/fullstack-guardian/references/deliverables-checklist.md +354 -354
- package/skills/backend/fullstack-guardian/references/design-template.md +91 -91
- package/skills/backend/fullstack-guardian/references/error-handling.md +135 -135
- package/skills/backend/fullstack-guardian/references/frontend-patterns.md +340 -340
- package/skills/backend/fullstack-guardian/references/integration-patterns.md +333 -333
- package/skills/backend/fullstack-guardian/references/security-checklist.md +106 -106
- package/skills/backend/graphql-architect/SKILL.md +146 -146
- package/skills/backend/graphql-architect/references/federation.md +418 -418
- package/skills/backend/graphql-architect/references/migration-from-rest.md +1141 -1141
- package/skills/backend/graphql-architect/references/resolvers.md +425 -425
- package/skills/backend/graphql-architect/references/schema-design.md +393 -393
- package/skills/backend/graphql-architect/references/security.md +569 -569
- package/skills/backend/graphql-architect/references/subscriptions.md +510 -510
- package/skills/backend/legacy-modernizer/SKILL.md +137 -137
- package/skills/backend/legacy-modernizer/references/legacy-testing.md +381 -381
- package/skills/backend/legacy-modernizer/references/migration-strategies.md +423 -423
- package/skills/backend/legacy-modernizer/references/refactoring-patterns.md +395 -395
- package/skills/backend/legacy-modernizer/references/strangler-fig-pattern.md +281 -281
- package/skills/backend/legacy-modernizer/references/system-assessment.md +487 -487
- package/skills/backend/microservices-architect/SKILL.md +164 -164
- package/skills/backend/microservices-architect/references/communication.md +499 -499
- package/skills/backend/microservices-architect/references/data.md +721 -721
- package/skills/backend/microservices-architect/references/decomposition.md +344 -344
- package/skills/backend/microservices-architect/references/observability.md +805 -805
- package/skills/backend/microservices-architect/references/patterns.md +603 -603
- package/skills/database/database-optimizer/SKILL.md +147 -147
- package/skills/database/database-optimizer/references/index-strategies.md +331 -331
- package/skills/database/database-optimizer/references/monitoring-analysis.md +501 -501
- package/skills/database/database-optimizer/references/mysql-tuning.md +452 -452
- package/skills/database/database-optimizer/references/postgresql-tuning.md +413 -413
- package/skills/database/database-optimizer/references/query-optimization.md +251 -251
- package/skills/database/postgres-pro/SKILL.md +152 -152
- package/skills/database/postgres-pro/references/extensions.md +404 -404
- package/skills/database/postgres-pro/references/jsonb.md +321 -321
- package/skills/database/postgres-pro/references/maintenance.md +481 -481
- package/skills/database/postgres-pro/references/performance.md +265 -265
- package/skills/database/postgres-pro/references/replication.md +446 -446
- package/skills/database/sql-pro/SKILL.md +129 -129
- package/skills/database/sql-pro/references/database-design.md +402 -402
- package/skills/database/sql-pro/references/dialect-differences.md +419 -419
- package/skills/database/sql-pro/references/optimization.md +384 -384
- package/skills/database/sql-pro/references/query-patterns.md +285 -285
- package/skills/database/sql-pro/references/window-functions.md +328 -328
- package/skills/dotnet/csharp-developer/SKILL.md +125 -125
- package/skills/dotnet/csharp-developer/references/aspnet-core.md +394 -394
- package/skills/dotnet/csharp-developer/references/blazor.md +553 -553
- package/skills/dotnet/csharp-developer/references/entity-framework.md +409 -409
- package/skills/dotnet/csharp-developer/references/modern-csharp.md +248 -248
- package/skills/dotnet/csharp-developer/references/performance.md +498 -498
- package/skills/dotnet/dotnet-core-expert/SKILL.md +138 -138
- package/skills/dotnet/dotnet-core-expert/references/authentication.md +546 -546
- package/skills/dotnet/dotnet-core-expert/references/clean-architecture.md +455 -455
- package/skills/dotnet/dotnet-core-expert/references/cloud-native.md +548 -548
- package/skills/dotnet/dotnet-core-expert/references/entity-framework.md +440 -440
- package/skills/dotnet/dotnet-core-expert/references/minimal-apis.md +319 -319
- package/skills/frontend/angular-architect/SKILL.md +152 -152
- package/skills/frontend/angular-architect/references/components.md +297 -297
- package/skills/frontend/angular-architect/references/ngrx.md +401 -401
- package/skills/frontend/angular-architect/references/routing.md +361 -361
- package/skills/frontend/angular-architect/references/rxjs.md +319 -319
- package/skills/frontend/angular-architect/references/testing.md +405 -405
- package/skills/frontend/design-commands/design.md +91 -91
- package/skills/frontend/design-commands/handoff.md +97 -97
- package/skills/frontend/design-commands/prototype.md +120 -120
- package/skills/frontend/design-commands/spec.md +160 -160
- package/skills/frontend/design-commands/style.md +78 -78
- package/skills/frontend/flutter-expert/SKILL.md +138 -138
- package/skills/frontend/flutter-expert/references/bloc-state.md +259 -259
- package/skills/frontend/flutter-expert/references/gorouter-navigation.md +119 -119
- package/skills/frontend/flutter-expert/references/performance.md +99 -99
- package/skills/frontend/flutter-expert/references/project-structure.md +118 -118
- package/skills/frontend/flutter-expert/references/riverpod-state.md +130 -130
- package/skills/frontend/flutter-expert/references/widget-patterns.md +123 -123
- package/skills/frontend/nextjs-developer/SKILL.md +143 -143
- package/skills/frontend/nextjs-developer/references/app-router.md +311 -311
- package/skills/frontend/nextjs-developer/references/data-fetching.md +482 -482
- package/skills/frontend/nextjs-developer/references/deployment.md +545 -545
- package/skills/frontend/nextjs-developer/references/server-actions.md +462 -462
- package/skills/frontend/nextjs-developer/references/server-components.md +384 -384
- package/skills/frontend/react-expert/SKILL.md +149 -149
- package/skills/frontend/react-expert/references/hooks-patterns.md +162 -162
- package/skills/frontend/react-expert/references/migration-class-to-modern.md +1119 -1119
- package/skills/frontend/react-expert/references/performance.md +168 -168
- package/skills/frontend/react-expert/references/react-19-features.md +174 -174
- package/skills/frontend/react-expert/references/server-components.md +143 -143
- package/skills/frontend/react-expert/references/state-management.md +171 -171
- package/skills/frontend/react-expert/references/testing-react.md +174 -174
- package/skills/frontend/react-native-expert/SKILL.md +185 -185
- package/skills/frontend/react-native-expert/references/expo-router.md +187 -187
- package/skills/frontend/react-native-expert/references/list-optimization.md +204 -204
- package/skills/frontend/react-native-expert/references/platform-handling.md +188 -188
- package/skills/frontend/react-native-expert/references/project-structure.md +171 -171
- package/skills/frontend/react-native-expert/references/storage-hooks.md +173 -173
- package/skills/frontend/senior-frontend/SKILL.md +477 -477
- package/skills/frontend/senior-frontend/references/frontend_best_practices.md +806 -806
- package/skills/frontend/senior-frontend/references/nextjs_optimization_guide.md +724 -724
- package/skills/frontend/senior-frontend/references/react_patterns.md +746 -746
- package/skills/frontend/senior-frontend/scripts/bundle_analyzer.py +407 -407
- package/skills/frontend/senior-frontend/scripts/component_generator.py +329 -329
- package/skills/frontend/senior-frontend/scripts/frontend_scaffolder.py +1005 -1005
- package/skills/frontend/ui-ux-pro-max/SKILL.md +386 -386
- package/skills/frontend/ui-ux-pro-max/data/charts.csv +26 -26
- package/skills/frontend/ui-ux-pro-max/data/colors.csv +97 -97
- package/skills/frontend/ui-ux-pro-max/data/icons.csv +101 -101
- package/skills/frontend/ui-ux-pro-max/data/landing.csv +31 -31
- package/skills/frontend/ui-ux-pro-max/data/products.csv +96 -96
- package/skills/frontend/ui-ux-pro-max/data/react-performance.csv +45 -45
- package/skills/frontend/ui-ux-pro-max/data/stacks/astro.csv +54 -54
- package/skills/frontend/ui-ux-pro-max/data/stacks/flutter.csv +53 -53
- package/skills/frontend/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -56
- package/skills/frontend/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -53
- package/skills/frontend/ui-ux-pro-max/data/stacks/nextjs.csv +53 -53
- package/skills/frontend/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -51
- package/skills/frontend/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -59
- package/skills/frontend/ui-ux-pro-max/data/stacks/react-native.csv +52 -52
- package/skills/frontend/ui-ux-pro-max/data/stacks/react.csv +54 -54
- package/skills/frontend/ui-ux-pro-max/data/stacks/shadcn.csv +61 -61
- package/skills/frontend/ui-ux-pro-max/data/stacks/svelte.csv +54 -54
- package/skills/frontend/ui-ux-pro-max/data/stacks/swiftui.csv +51 -51
- package/skills/frontend/ui-ux-pro-max/data/stacks/vue.csv +50 -50
- package/skills/frontend/ui-ux-pro-max/data/styles.csv +68 -68
- package/skills/frontend/ui-ux-pro-max/data/typography.csv +57 -57
- package/skills/frontend/ui-ux-pro-max/data/ui-reasoning.csv +101 -101
- package/skills/frontend/ui-ux-pro-max/data/ux-guidelines.csv +99 -99
- package/skills/frontend/ui-ux-pro-max/data/web-interface.csv +31 -31
- package/skills/frontend/ui-ux-pro-max/scripts/core.py +253 -253
- package/skills/frontend/ui-ux-pro-max/scripts/design_system.py +1067 -1067
- package/skills/frontend/ui-ux-pro-max/scripts/search.py +114 -114
- package/skills/frontend/vue-expert/SKILL.md +98 -98
- package/skills/frontend/vue-expert/references/build-tooling.md +480 -480
- package/skills/frontend/vue-expert/references/components.md +448 -448
- package/skills/frontend/vue-expert/references/composition-api.md +299 -299
- package/skills/frontend/vue-expert/references/mobile-hybrid.md +636 -636
- package/skills/frontend/vue-expert/references/nuxt.md +669 -669
- package/skills/frontend/vue-expert/references/state-management.md +449 -449
- package/skills/frontend/vue-expert/references/typescript.md +584 -584
- package/skills/frontend/vue-expert-js/SKILL.md +167 -167
- package/skills/frontend/vue-expert-js/references/component-architecture.md +219 -219
- package/skills/frontend/vue-expert-js/references/composables-patterns.md +183 -183
- package/skills/frontend/vue-expert-js/references/jsdoc-typing.md +535 -535
- package/skills/frontend/vue-expert-js/references/state-management.md +249 -249
- package/skills/frontend/vue-expert-js/references/testing-patterns.md +237 -237
- package/skills/go-rust-cpp/cpp-pro/SKILL.md +115 -115
- package/skills/go-rust-cpp/cpp-pro/references/build-tooling.md +440 -440
- package/skills/go-rust-cpp/cpp-pro/references/concurrency.md +437 -437
- package/skills/go-rust-cpp/cpp-pro/references/memory-performance.md +397 -397
- package/skills/go-rust-cpp/cpp-pro/references/modern-cpp.md +304 -304
- package/skills/go-rust-cpp/cpp-pro/references/templates.md +357 -357
- package/skills/go-rust-cpp/golang-pro/SKILL.md +122 -122
- package/skills/go-rust-cpp/golang-pro/references/concurrency.md +329 -329
- package/skills/go-rust-cpp/golang-pro/references/generics.md +442 -442
- package/skills/go-rust-cpp/golang-pro/references/interfaces.md +432 -432
- package/skills/go-rust-cpp/golang-pro/references/project-structure.md +477 -477
- package/skills/go-rust-cpp/golang-pro/references/testing.md +451 -451
- package/skills/go-rust-cpp/rust-engineer/SKILL.md +167 -167
- package/skills/go-rust-cpp/rust-engineer/references/async.md +458 -458
- package/skills/go-rust-cpp/rust-engineer/references/error-handling.md +334 -334
- package/skills/go-rust-cpp/rust-engineer/references/ownership.md +278 -278
- package/skills/go-rust-cpp/rust-engineer/references/testing.md +470 -470
- package/skills/go-rust-cpp/rust-engineer/references/traits.md +413 -413
- package/skills/infra/cli-developer/SKILL.md +113 -113
- package/skills/infra/cli-developer/references/design-patterns.md +221 -221
- package/skills/infra/cli-developer/references/go-cli.md +540 -540
- package/skills/infra/cli-developer/references/node-cli.md +383 -383
- package/skills/infra/cli-developer/references/python-cli.md +422 -422
- package/skills/infra/cli-developer/references/ux-patterns.md +448 -448
- package/skills/infra/cloud-architect/SKILL.md +216 -216
- package/skills/infra/cloud-architect/references/aws.md +394 -394
- package/skills/infra/cloud-architect/references/azure.md +562 -562
- package/skills/infra/cloud-architect/references/cost.md +582 -582
- package/skills/infra/cloud-architect/references/gcp.md +633 -633
- package/skills/infra/cloud-architect/references/multi-cloud.md +483 -483
- package/skills/infra/devops-engineer/SKILL.md +144 -144
- package/skills/infra/devops-engineer/references/deployment-strategies.md +241 -241
- package/skills/infra/devops-engineer/references/docker-patterns.md +113 -113
- package/skills/infra/devops-engineer/references/github-actions.md +139 -139
- package/skills/infra/devops-engineer/references/incident-response.md +331 -331
- package/skills/infra/devops-engineer/references/kubernetes.md +154 -154
- package/skills/infra/devops-engineer/references/platform-engineering.md +417 -417
- package/skills/infra/devops-engineer/references/release-automation.md +527 -527
- package/skills/infra/devops-engineer/references/terraform-iac.md +141 -141
- package/skills/infra/kubernetes-specialist/SKILL.md +241 -241
- package/skills/infra/kubernetes-specialist/references/configuration.md +452 -452
- package/skills/infra/kubernetes-specialist/references/cost-optimization.md +458 -458
- package/skills/infra/kubernetes-specialist/references/custom-operators.md +563 -563
- package/skills/infra/kubernetes-specialist/references/gitops.md +530 -530
- package/skills/infra/kubernetes-specialist/references/helm-charts.md +912 -912
- package/skills/infra/kubernetes-specialist/references/multi-cluster.md +507 -507
- package/skills/infra/kubernetes-specialist/references/networking.md +447 -447
- package/skills/infra/kubernetes-specialist/references/service-mesh.md +459 -459
- package/skills/infra/kubernetes-specialist/references/storage.md +535 -535
- package/skills/infra/kubernetes-specialist/references/troubleshooting.md +414 -414
- package/skills/infra/kubernetes-specialist/references/workloads.md +377 -377
- package/skills/infra/mcp-developer/SKILL.md +143 -143
- package/skills/infra/mcp-developer/references/protocol.md +244 -244
- package/skills/infra/mcp-developer/references/python-sdk.md +367 -367
- package/skills/infra/mcp-developer/references/resources.md +554 -554
- package/skills/infra/mcp-developer/references/tools.md +480 -480
- package/skills/infra/mcp-developer/references/typescript-sdk.md +350 -350
- package/skills/infra/monitoring-expert/SKILL.md +176 -176
- package/skills/infra/monitoring-expert/references/alerting-rules.md +141 -141
- package/skills/infra/monitoring-expert/references/application-profiling.md +331 -331
- package/skills/infra/monitoring-expert/references/capacity-planning.md +344 -344
- package/skills/infra/monitoring-expert/references/dashboards.md +126 -126
- package/skills/infra/monitoring-expert/references/opentelemetry.md +123 -123
- package/skills/infra/monitoring-expert/references/performance-testing.md +269 -269
- package/skills/infra/monitoring-expert/references/prometheus-metrics.md +136 -136
- package/skills/infra/monitoring-expert/references/structured-logging.md +142 -142
- package/skills/infra/sre-engineer/SKILL.md +181 -181
- package/skills/infra/sre-engineer/references/automation-toil.md +492 -492
- package/skills/infra/sre-engineer/references/error-budget-policy.md +334 -334
- package/skills/infra/sre-engineer/references/incident-chaos.md +576 -576
- package/skills/infra/sre-engineer/references/monitoring-alerting.md +424 -424
- package/skills/infra/sre-engineer/references/slo-sli-management.md +238 -238
- package/skills/infra/terraform-engineer/SKILL.md +143 -143
- package/skills/infra/terraform-engineer/references/best-practices.md +583 -583
- package/skills/infra/terraform-engineer/references/module-patterns.md +297 -297
- package/skills/infra/terraform-engineer/references/providers.md +452 -452
- package/skills/infra/terraform-engineer/references/state-management.md +371 -371
- package/skills/infra/terraform-engineer/references/testing.md +486 -486
- package/skills/infra/websocket-engineer/SKILL.md +168 -168
- package/skills/infra/websocket-engineer/references/alternatives.md +391 -391
- package/skills/infra/websocket-engineer/references/patterns.md +400 -400
- package/skills/infra/websocket-engineer/references/protocol.md +195 -195
- package/skills/infra/websocket-engineer/references/scaling.md +333 -333
- package/skills/infra/websocket-engineer/references/security.md +474 -474
- package/skills/java/java-architect/SKILL.md +132 -132
- package/skills/java/java-architect/references/jpa-optimization.md +393 -393
- package/skills/java/java-architect/references/reactive-webflux.md +356 -356
- package/skills/java/java-architect/references/spring-boot-setup.md +269 -269
- package/skills/java/java-architect/references/spring-security.md +445 -445
- package/skills/java/java-architect/references/testing-patterns.md +500 -500
- package/skills/java/kotlin-specialist/SKILL.md +147 -147
- package/skills/java/kotlin-specialist/references/android-compose.md +419 -419
- package/skills/java/kotlin-specialist/references/coroutines-flow.md +276 -276
- package/skills/java/kotlin-specialist/references/dsl-idioms.md +421 -421
- package/skills/java/kotlin-specialist/references/ktor-server.md +426 -426
- package/skills/java/kotlin-specialist/references/multiplatform-kmp.md +380 -380
- package/skills/java/spring-boot-engineer/SKILL.md +195 -195
- package/skills/java/spring-boot-engineer/references/cloud.md +498 -498
- package/skills/java/spring-boot-engineer/references/data.md +381 -381
- package/skills/java/spring-boot-engineer/references/security.md +459 -459
- package/skills/java/spring-boot-engineer/references/testing.md +545 -545
- package/skills/java/spring-boot-engineer/references/web.md +295 -295
- package/skills/javascript/javascript-pro/SKILL.md +132 -132
- package/skills/javascript/javascript-pro/references/async-patterns.md +334 -334
- package/skills/javascript/javascript-pro/references/browser-apis.md +398 -398
- package/skills/javascript/javascript-pro/references/modern-syntax.md +272 -272
- package/skills/javascript/javascript-pro/references/modules.md +357 -357
- package/skills/javascript/javascript-pro/references/node-essentials.md +471 -471
- package/skills/javascript/nestjs-expert/SKILL.md +206 -206
- package/skills/javascript/nestjs-expert/references/authentication.md +166 -166
- package/skills/javascript/nestjs-expert/references/controllers-routing.md +111 -111
- package/skills/javascript/nestjs-expert/references/dtos-validation.md +153 -153
- package/skills/javascript/nestjs-expert/references/migration-from-express.md +1237 -1237
- package/skills/javascript/nestjs-expert/references/services-di.md +140 -140
- package/skills/javascript/nestjs-expert/references/testing-patterns.md +186 -186
- package/skills/javascript/typescript-pro/SKILL.md +145 -145
- package/skills/javascript/typescript-pro/references/advanced-types.md +259 -259
- package/skills/javascript/typescript-pro/references/configuration.md +445 -445
- package/skills/javascript/typescript-pro/references/patterns.md +484 -484
- package/skills/javascript/typescript-pro/references/type-guards.md +352 -352
- package/skills/javascript/typescript-pro/references/utility-types.md +329 -329
- package/skills/php/laravel-specialist/SKILL.md +262 -262
- package/skills/php/laravel-specialist/references/eloquent.md +351 -351
- package/skills/php/laravel-specialist/references/livewire.md +512 -512
- package/skills/php/laravel-specialist/references/queues.md +423 -423
- package/skills/php/laravel-specialist/references/routing.md +362 -362
- package/skills/php/laravel-specialist/references/testing.md +522 -522
- package/skills/php/php-pro/SKILL.md +206 -206
- package/skills/php/php-pro/references/async-patterns.md +412 -412
- package/skills/php/php-pro/references/laravel-patterns.md +377 -377
- package/skills/php/php-pro/references/modern-php-features.md +323 -323
- package/skills/php/php-pro/references/symfony-patterns.md +466 -466
- package/skills/php/php-pro/references/testing-quality.md +466 -466
- package/skills/product/competitive-analysis/SKILL.md +257 -257
- package/skills/product/meeting-notes/SKILL.md +266 -266
- package/skills/product/prd-template/SKILL.md +150 -150
- package/skills/product/stakeholder-update/SKILL.md +225 -225
- package/skills/product/user-research-synthesis/SKILL.md +235 -235
- package/skills/python/django-expert/SKILL.md +162 -162
- package/skills/python/django-expert/references/authentication.md +145 -145
- package/skills/python/django-expert/references/drf-serializers.md +148 -148
- package/skills/python/django-expert/references/models-orm.md +151 -151
- package/skills/python/django-expert/references/testing-django.md +204 -204
- package/skills/python/django-expert/references/viewsets-views.md +153 -153
- package/skills/python/fastapi-expert/SKILL.md +185 -185
- package/skills/python/fastapi-expert/references/async-sqlalchemy.md +146 -146
- package/skills/python/fastapi-expert/references/authentication.md +159 -159
- package/skills/python/fastapi-expert/references/endpoints-routing.md +142 -142
- package/skills/python/fastapi-expert/references/migration-from-django.md +996 -996
- package/skills/python/fastapi-expert/references/pydantic-v2.md +135 -135
- package/skills/python/fastapi-expert/references/testing-async.md +159 -159
- package/skills/python/pandas-pro/SKILL.md +178 -178
- package/skills/python/pandas-pro/references/aggregation-groupby.md +545 -545
- package/skills/python/pandas-pro/references/data-cleaning.md +500 -500
- package/skills/python/pandas-pro/references/dataframe-operations.md +420 -420
- package/skills/python/pandas-pro/references/merging-joining.md +596 -596
- package/skills/python/pandas-pro/references/performance-optimization.md +597 -597
- package/skills/python/python-pro/SKILL.md +177 -177
- package/skills/python/python-pro/references/async-patterns.md +356 -356
- package/skills/python/python-pro/references/packaging.md +460 -460
- package/skills/python/python-pro/references/standard-library.md +378 -378
- package/skills/python/python-pro/references/testing.md +404 -404
- package/skills/python/python-pro/references/type-system.md +290 -290
- package/skills/quality/chaos-engineer/SKILL.md +182 -182
- package/skills/quality/chaos-engineer/references/chaos-tools.md +511 -511
- package/skills/quality/chaos-engineer/references/experiment-design.md +229 -229
- package/skills/quality/chaos-engineer/references/game-days.md +434 -434
- package/skills/quality/chaos-engineer/references/infrastructure-chaos.md +348 -348
- package/skills/quality/chaos-engineer/references/kubernetes-chaos.md +432 -432
- package/skills/quality/code-reviewer/SKILL.md +119 -119
- package/skills/quality/code-reviewer/references/common-issues.md +142 -142
- package/skills/quality/code-reviewer/references/feedback-examples.md +144 -144
- package/skills/quality/code-reviewer/references/receiving-feedback.md +238 -238
- package/skills/quality/code-reviewer/references/report-template.md +109 -109
- package/skills/quality/code-reviewer/references/review-checklist.md +88 -88
- package/skills/quality/code-reviewer/references/spec-compliance-review.md +258 -258
- package/skills/quality/playwright-expert/SKILL.md +169 -169
- package/skills/quality/playwright-expert/references/api-mocking.md +140 -140
- package/skills/quality/playwright-expert/references/configuration.md +155 -155
- package/skills/quality/playwright-expert/references/debugging-flaky.md +150 -150
- package/skills/quality/playwright-expert/references/page-object-model.md +152 -152
- package/skills/quality/playwright-expert/references/selectors-locators.md +119 -119
- package/skills/quality/secure-code-guardian/SKILL.md +191 -191
- package/skills/quality/secure-code-guardian/references/authentication.md +136 -136
- package/skills/quality/secure-code-guardian/references/input-validation.md +146 -146
- package/skills/quality/secure-code-guardian/references/owasp-prevention.md +135 -135
- package/skills/quality/secure-code-guardian/references/security-headers.md +133 -133
- package/skills/quality/secure-code-guardian/references/xss-csrf.md +157 -157
- package/skills/quality/security-reviewer/SKILL.md +103 -103
- package/skills/quality/security-reviewer/references/infrastructure-security.md +268 -268
- package/skills/quality/security-reviewer/references/penetration-testing.md +268 -268
- package/skills/quality/security-reviewer/references/report-template.md +170 -170
- package/skills/quality/security-reviewer/references/sast-tools.md +117 -117
- package/skills/quality/security-reviewer/references/secret-scanning.md +125 -125
- package/skills/quality/security-reviewer/references/vulnerability-patterns.md +152 -152
- package/skills/quality/senior-qa/README.md +196 -196
- package/skills/quality/senior-qa/SKILL.md +399 -399
- package/skills/quality/senior-qa/references/qa_best_practices.md +964 -964
- package/skills/quality/senior-qa/references/test_automation_patterns.md +1009 -1009
- package/skills/quality/senior-qa/references/testing_strategies.md +649 -649
- package/skills/quality/senior-qa/scripts/coverage_analyzer.py +836 -836
- package/skills/quality/senior-qa/scripts/e2e_test_scaffolder.py +820 -820
- package/skills/quality/senior-qa/scripts/test_suite_generator.py +605 -605
- package/skills/quality/tdd-guide/HOW_TO_USE.md +313 -313
- package/skills/quality/tdd-guide/README.md +680 -680
- package/skills/quality/tdd-guide/SKILL.md +122 -122
- package/skills/quality/tdd-guide/assets/expected_output.json +77 -77
- package/skills/quality/tdd-guide/assets/sample_input_python.json +39 -39
- package/skills/quality/tdd-guide/assets/sample_input_typescript.json +36 -36
- package/skills/quality/tdd-guide/references/ci-integration.md +195 -195
- package/skills/quality/tdd-guide/references/framework-guide.md +206 -206
- package/skills/quality/tdd-guide/references/tdd-best-practices.md +128 -128
- package/skills/quality/tdd-guide/scripts/coverage_analyzer.py +434 -434
- package/skills/quality/tdd-guide/scripts/fixture_generator.py +440 -440
- package/skills/quality/tdd-guide/scripts/format_detector.py +384 -384
- package/skills/quality/tdd-guide/scripts/framework_adapter.py +428 -428
- package/skills/quality/tdd-guide/scripts/metrics_calculator.py +456 -456
- package/skills/quality/tdd-guide/scripts/output_formatter.py +354 -354
- package/skills/quality/tdd-guide/scripts/tdd_workflow.py +474 -474
- package/skills/quality/tdd-guide/scripts/test_generator.py +438 -438
- package/skills/quality/test-master/SKILL.md +94 -94
- package/skills/quality/test-master/references/automation-frameworks.md +294 -294
- package/skills/quality/test-master/references/e2e-testing.md +128 -128
- package/skills/quality/test-master/references/integration-testing.md +120 -120
- package/skills/quality/test-master/references/performance-testing.md +118 -118
- package/skills/quality/test-master/references/qa-methodology.md +247 -247
- package/skills/quality/test-master/references/security-testing.md +127 -127
- package/skills/quality/test-master/references/tdd-iron-laws.md +174 -174
- package/skills/quality/test-master/references/test-reports.md +104 -104
- package/skills/quality/test-master/references/testing-anti-patterns.md +231 -231
- package/skills/quality/test-master/references/unit-testing.md +113 -113
- package/skills/ruby/rails-expert/SKILL.md +154 -154
- package/skills/ruby/rails-expert/references/active-record.md +244 -244
- package/skills/ruby/rails-expert/references/api-development.md +401 -401
- package/skills/ruby/rails-expert/references/background-jobs.md +272 -272
- package/skills/ruby/rails-expert/references/hotwire-turbo.md +228 -228
- package/skills/ruby/rails-expert/references/rspec-testing.md +367 -367
- package/skills/swift/swift-expert/SKILL.md +163 -163
- package/skills/swift/swift-expert/references/async-concurrency.md +360 -360
- package/skills/swift/swift-expert/references/memory-performance.md +377 -377
- package/skills/swift/swift-expert/references/protocol-oriented.md +354 -354
- package/skills/swift/swift-expert/references/swiftui-patterns.md +291 -291
- package/skills/swift/swift-expert/references/testing-patterns.md +399 -399
- package/skills/workflow/brainstorming/SKILL.md +164 -164
- package/skills/workflow/brainstorming/scripts/frame-template.html +214 -214
- package/skills/workflow/brainstorming/scripts/helper.js +88 -88
- package/skills/workflow/brainstorming/scripts/server.cjs +354 -354
- package/skills/workflow/brainstorming/scripts/start-server.sh +148 -148
- package/skills/workflow/brainstorming/scripts/stop-server.sh +56 -56
- package/skills/workflow/brainstorming/spec-document-reviewer-prompt.md +49 -49
- package/skills/workflow/brainstorming/visual-companion.md +287 -287
- package/skills/workflow/documentation/SKILL.md +45 -45
- package/skills/workflow/entropy-management/SKILL.md +115 -115
- package/skills/workflow/executing-plans/SKILL.md +70 -70
- package/skills/workflow/finishing-a-development-branch/SKILL.md +200 -200
- package/skills/workflow/receiving-code-review/SKILL.md +213 -213
- package/skills/workflow/requesting-code-review/SKILL.md +105 -105
- package/skills/workflow/requesting-code-review/code-reviewer.md +146 -146
- package/skills/workflow/requirement-engineering/SKILL.md +111 -111
- package/skills/workflow/systematic-debugging/CREATION-LOG.md +119 -119
- package/skills/workflow/systematic-debugging/SKILL.md +296 -296
- package/skills/workflow/systematic-debugging/condition-based-waiting-example.ts +158 -158
- package/skills/workflow/systematic-debugging/condition-based-waiting.md +115 -115
- package/skills/workflow/systematic-debugging/defense-in-depth.md +122 -122
- package/skills/workflow/systematic-debugging/find-polluter.sh +63 -63
- package/skills/workflow/systematic-debugging/root-cause-tracing.md +169 -169
- package/skills/workflow/systematic-debugging/test-academic.md +14 -14
- package/skills/workflow/systematic-debugging/test-pressure-1.md +58 -58
- package/skills/workflow/systematic-debugging/test-pressure-2.md +68 -68
- package/skills/workflow/systematic-debugging/test-pressure-3.md +69 -69
- package/skills/workflow/using-git-worktrees/SKILL.md +218 -218
- package/skills/workflow/verification-before-completion/SKILL.md +139 -139
- package/skills/workflow/writing-plans/SKILL.md +151 -151
- package/skills/workflow/writing-plans/plan-document-reviewer-prompt.md +49 -49
- package/skills/workflow/writing-skills/SKILL.md +655 -655
- package/skills/workflow/writing-skills/anthropic-best-practices.md +1150 -1150
- package/skills/workflow/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -189
- package/skills/workflow/writing-skills/persuasion-principles.md +187 -187
- package/skills/workflow/writing-skills/render-graphs.js +168 -168
- package/skills/workflow/writing-skills/testing-skills-with-subagents.md +384 -384
|
@@ -1,347 +1,347 @@
|
|
|
1
|
-
# LoRA and Parameter-Efficient Fine-Tuning
|
|
2
|
-
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
Parameter-Efficient Fine-Tuning (PEFT) methods train only a small subset of model parameters while keeping the base model frozen. This dramatically reduces memory requirements and enables fine-tuning of large models on consumer hardware.
|
|
8
|
-
|
|
9
|
-
## When to Use PEFT vs Full Fine-Tuning
|
|
10
|
-
|
|
11
|
-
| Method | Use When | Avoid When |
|
|
12
|
-
|--------|----------|------------|
|
|
13
|
-
| **LoRA** | 7B+ models, limited VRAM, need multiple task adapters | Very small models (<1B), need maximum quality |
|
|
14
|
-
| **QLoRA** | 13B+ models, single GPU, memory-constrained | High-throughput training, inference speed critical |
|
|
15
|
-
| **Full Fine-Tuning** | Small models, abundant compute, maximum performance needed | Large models, limited resources |
|
|
16
|
-
| **Prefix Tuning** | Generation tasks, need interpretable soft prompts | Complex reasoning tasks |
|
|
17
|
-
| **IA3** | Extreme efficiency needed, inference overhead critical | Tasks needing high adapter capacity |
|
|
18
|
-
|
|
19
|
-
## LoRA Configuration
|
|
20
|
-
|
|
21
|
-
```python
|
|
22
|
-
from peft import LoraConfig, get_peft_model, TaskType
|
|
23
|
-
from transformers import AutoModelForCausalLM, AutoTokenizer
|
|
24
|
-
|
|
25
|
-
# Load base model
|
|
26
|
-
model = AutoModelForCausalLM.from_pretrained(
|
|
27
|
-
"meta-llama/Llama-3.1-8B",
|
|
28
|
-
torch_dtype=torch.bfloat16,
|
|
29
|
-
device_map="auto",
|
|
30
|
-
attn_implementation="flash_attention_2" # Use Flash Attention if available
|
|
31
|
-
)
|
|
32
|
-
|
|
33
|
-
# LoRA configuration for instruction tuning
|
|
34
|
-
lora_config = LoraConfig(
|
|
35
|
-
task_type=TaskType.CAUSAL_LM,
|
|
36
|
-
r=16, # Rank - start with 8-16, increase if underfitting
|
|
37
|
-
lora_alpha=32, # Alpha - typically 2x rank
|
|
38
|
-
lora_dropout=0.05, # Dropout for regularization
|
|
39
|
-
target_modules=[ # Target attention layers
|
|
40
|
-
"q_proj", "k_proj", "v_proj", "o_proj", # Attention
|
|
41
|
-
"gate_proj", "up_proj", "down_proj" # MLP (optional, increases capacity)
|
|
42
|
-
],
|
|
43
|
-
bias="none", # "none", "all", or "lora_only"
|
|
44
|
-
modules_to_save=None # Modules to train fully (e.g., embed_tokens for new tokens)
|
|
45
|
-
)
|
|
46
|
-
|
|
47
|
-
# Create PEFT model
|
|
48
|
-
model = get_peft_model(model, lora_config)
|
|
49
|
-
model.print_trainable_parameters()
|
|
50
|
-
# Output: trainable params: 13,631,488 || all params: 8,043,163,648 || trainable%: 0.1695
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
### Rank Selection Guide
|
|
54
|
-
|
|
55
|
-
```python
|
|
56
|
-
def recommend_lora_rank(task_complexity: str, dataset_size: int, model_size_b: float) -> int:
|
|
57
|
-
"""
|
|
58
|
-
Recommend LoRA rank based on task and resources.
|
|
59
|
-
|
|
60
|
-
Args:
|
|
61
|
-
task_complexity: "simple" (classification), "moderate" (QA), "complex" (creative)
|
|
62
|
-
dataset_size: Number of training examples
|
|
63
|
-
model_size_b: Model size in billions of parameters
|
|
64
|
-
"""
|
|
65
|
-
base_rank = {
|
|
66
|
-
"simple": 8,
|
|
67
|
-
"moderate": 16,
|
|
68
|
-
"complex": 32
|
|
69
|
-
}[task_complexity]
|
|
70
|
-
|
|
71
|
-
# Adjust for dataset size
|
|
72
|
-
if dataset_size < 1000:
|
|
73
|
-
rank = max(4, base_rank // 2) # Reduce rank to prevent overfitting
|
|
74
|
-
elif dataset_size > 50000:
|
|
75
|
-
rank = min(64, base_rank * 2) # Can support higher rank
|
|
76
|
-
else:
|
|
77
|
-
rank = base_rank
|
|
78
|
-
|
|
79
|
-
# Adjust for model size (larger models may need lower rank)
|
|
80
|
-
if model_size_b > 30:
|
|
81
|
-
rank = max(4, rank // 2)
|
|
82
|
-
|
|
83
|
-
return rank
|
|
84
|
-
|
|
85
|
-
# Example usage
|
|
86
|
-
rank = recommend_lora_rank("moderate", dataset_size=10000, model_size_b=8)
|
|
87
|
-
print(f"Recommended rank: {rank}") # 16
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
## QLoRA Configuration
|
|
91
|
-
|
|
92
|
-
QLoRA combines 4-bit quantization with LoRA for extreme memory efficiency.
|
|
93
|
-
|
|
94
|
-
```python
|
|
95
|
-
from transformers import BitsAndBytesConfig
|
|
96
|
-
import torch
|
|
97
|
-
|
|
98
|
-
# 4-bit quantization config
|
|
99
|
-
bnb_config = BitsAndBytesConfig(
|
|
100
|
-
load_in_4bit=True,
|
|
101
|
-
bnb_4bit_quant_type="nf4", # NormalFloat4 for better quality
|
|
102
|
-
bnb_4bit_compute_dtype=torch.bfloat16,
|
|
103
|
-
bnb_4bit_use_double_quant=True # Nested quantization for more savings
|
|
104
|
-
)
|
|
105
|
-
|
|
106
|
-
# Load quantized model
|
|
107
|
-
model = AutoModelForCausalLM.from_pretrained(
|
|
108
|
-
"meta-llama/Llama-3.1-70B",
|
|
109
|
-
quantization_config=bnb_config,
|
|
110
|
-
device_map="auto",
|
|
111
|
-
attn_implementation="flash_attention_2"
|
|
112
|
-
)
|
|
113
|
-
|
|
114
|
-
# Prepare model for kbit training
|
|
115
|
-
from peft import prepare_model_for_kbit_training
|
|
116
|
-
model = prepare_model_for_kbit_training(model, use_gradient_checkpointing=True)
|
|
117
|
-
|
|
118
|
-
# Apply LoRA
|
|
119
|
-
lora_config = LoraConfig(
|
|
120
|
-
r=16,
|
|
121
|
-
lora_alpha=32,
|
|
122
|
-
target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
|
|
123
|
-
lora_dropout=0.05,
|
|
124
|
-
bias="none",
|
|
125
|
-
task_type=TaskType.CAUSAL_LM
|
|
126
|
-
)
|
|
127
|
-
model = get_peft_model(model, lora_config)
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
### Memory Comparison
|
|
131
|
-
|
|
132
|
-
| Model | Full FT | LoRA (r=16) | QLoRA (r=16) |
|
|
133
|
-
|-------|---------|-------------|--------------|
|
|
134
|
-
| Llama 3.1 8B | ~64 GB | ~18 GB | ~6 GB |
|
|
135
|
-
| Llama 3.1 70B | ~560 GB | ~160 GB | ~48 GB |
|
|
136
|
-
| Mistral 7B | ~56 GB | ~16 GB | ~5 GB |
|
|
137
|
-
|
|
138
|
-
## Training with PEFT
|
|
139
|
-
|
|
140
|
-
```python
|
|
141
|
-
from transformers import TrainingArguments, Trainer
|
|
142
|
-
from trl import SFTTrainer
|
|
143
|
-
|
|
144
|
-
training_args = TrainingArguments(
|
|
145
|
-
output_dir="./lora-output",
|
|
146
|
-
num_train_epochs=3,
|
|
147
|
-
per_device_train_batch_size=4,
|
|
148
|
-
gradient_accumulation_steps=4, # Effective batch size = 16
|
|
149
|
-
learning_rate=2e-4, # Higher LR for LoRA than full FT
|
|
150
|
-
lr_scheduler_type="cosine",
|
|
151
|
-
warmup_ratio=0.03,
|
|
152
|
-
logging_steps=10,
|
|
153
|
-
save_strategy="steps",
|
|
154
|
-
save_steps=100,
|
|
155
|
-
evaluation_strategy="steps",
|
|
156
|
-
eval_steps=100,
|
|
157
|
-
bf16=True,
|
|
158
|
-
gradient_checkpointing=True,
|
|
159
|
-
gradient_checkpointing_kwargs={"use_reentrant": False},
|
|
160
|
-
optim="paged_adamw_8bit", # Memory-efficient optimizer
|
|
161
|
-
max_grad_norm=0.3,
|
|
162
|
-
group_by_length=True, # Group similar length sequences
|
|
163
|
-
report_to="wandb"
|
|
164
|
-
)
|
|
165
|
-
|
|
166
|
-
# Using TRL's SFTTrainer for instruction tuning
|
|
167
|
-
trainer = SFTTrainer(
|
|
168
|
-
model=model,
|
|
169
|
-
args=training_args,
|
|
170
|
-
train_dataset=train_dataset,
|
|
171
|
-
eval_dataset=eval_dataset,
|
|
172
|
-
tokenizer=tokenizer,
|
|
173
|
-
max_seq_length=2048,
|
|
174
|
-
packing=True, # Pack short sequences for efficiency
|
|
175
|
-
dataset_text_field="text"
|
|
176
|
-
)
|
|
177
|
-
|
|
178
|
-
trainer.train()
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
## Target Module Selection
|
|
182
|
-
|
|
183
|
-
Different architectures have different module names:
|
|
184
|
-
|
|
185
|
-
```python
|
|
186
|
-
# Common target modules by architecture
|
|
187
|
-
TARGET_MODULES = {
|
|
188
|
-
"llama": ["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"],
|
|
189
|
-
"mistral": ["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"],
|
|
190
|
-
"falcon": ["query_key_value", "dense", "dense_h_to_4h", "dense_4h_to_h"],
|
|
191
|
-
"gpt2": ["c_attn", "c_proj", "c_fc"],
|
|
192
|
-
"phi": ["q_proj", "k_proj", "v_proj", "dense", "fc1", "fc2"],
|
|
193
|
-
"qwen2": ["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"],
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
def get_target_modules(model_name: str, include_mlp: bool = True) -> list[str]:
|
|
197
|
-
"""Get appropriate target modules for a model architecture."""
|
|
198
|
-
name_lower = model_name.lower()
|
|
199
|
-
|
|
200
|
-
for arch, modules in TARGET_MODULES.items():
|
|
201
|
-
if arch in name_lower:
|
|
202
|
-
if include_mlp:
|
|
203
|
-
return modules
|
|
204
|
-
# Return only attention modules
|
|
205
|
-
attention_keywords = ["q_proj", "k_proj", "v_proj", "o_proj", "query", "key", "value", "attn"]
|
|
206
|
-
return [m for m in modules if any(kw in m.lower() for kw in attention_keywords)]
|
|
207
|
-
|
|
208
|
-
# Default for unknown architectures - inspect model
|
|
209
|
-
raise ValueError(f"Unknown architecture: {model_name}. Inspect model.named_modules() to find target modules.")
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
## Adapter Merging Strategies
|
|
213
|
-
|
|
214
|
-
```python
|
|
215
|
-
from peft import PeftModel
|
|
216
|
-
|
|
217
|
-
# Load base model and adapter
|
|
218
|
-
base_model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.1-8B")
|
|
219
|
-
model = PeftModel.from_pretrained(base_model, "path/to/lora-adapter")
|
|
220
|
-
|
|
221
|
-
# Method 1: Merge adapter weights into base model
|
|
222
|
-
merged_model = model.merge_and_unload()
|
|
223
|
-
merged_model.save_pretrained("./merged-model")
|
|
224
|
-
|
|
225
|
-
# Method 2: Merge multiple adapters (weighted combination)
|
|
226
|
-
from peft import add_weighted_adapter
|
|
227
|
-
|
|
228
|
-
# Load multiple adapters
|
|
229
|
-
model = PeftModel.from_pretrained(base_model, "adapter1", adapter_name="adapter1")
|
|
230
|
-
model.load_adapter("adapter2", adapter_name="adapter2")
|
|
231
|
-
model.load_adapter("adapter3", adapter_name="adapter3")
|
|
232
|
-
|
|
233
|
-
# Combine with weights
|
|
234
|
-
model.add_weighted_adapter(
|
|
235
|
-
adapters=["adapter1", "adapter2", "adapter3"],
|
|
236
|
-
weights=[0.5, 0.3, 0.2],
|
|
237
|
-
adapter_name="combined",
|
|
238
|
-
combination_type="linear" # or "svd", "cat"
|
|
239
|
-
)
|
|
240
|
-
model.set_adapter("combined")
|
|
241
|
-
```
|
|
242
|
-
|
|
243
|
-
## DoRA (Weight-Decomposed LoRA)
|
|
244
|
-
|
|
245
|
-
DoRA improves on LoRA by decomposing weights into magnitude and direction components.
|
|
246
|
-
|
|
247
|
-
```python
|
|
248
|
-
from peft import LoraConfig
|
|
249
|
-
|
|
250
|
-
# DoRA configuration
|
|
251
|
-
dora_config = LoraConfig(
|
|
252
|
-
r=16,
|
|
253
|
-
lora_alpha=32,
|
|
254
|
-
target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
|
|
255
|
-
lora_dropout=0.05,
|
|
256
|
-
use_dora=True, # Enable DoRA
|
|
257
|
-
task_type=TaskType.CAUSAL_LM
|
|
258
|
-
)
|
|
259
|
-
|
|
260
|
-
# Training is identical to LoRA
|
|
261
|
-
model = get_peft_model(model, dora_config)
|
|
262
|
-
```
|
|
263
|
-
|
|
264
|
-
## rsLoRA (Rank-Stabilized LoRA)
|
|
265
|
-
|
|
266
|
-
Proper scaling for higher ranks:
|
|
267
|
-
|
|
268
|
-
```python
|
|
269
|
-
from peft import LoraConfig
|
|
270
|
-
|
|
271
|
-
# rsLoRA for high-rank training
|
|
272
|
-
rslora_config = LoraConfig(
|
|
273
|
-
r=64, # Higher rank
|
|
274
|
-
lora_alpha=64,
|
|
275
|
-
target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
|
|
276
|
-
use_rslora=True, # Rank-stabilized scaling
|
|
277
|
-
task_type=TaskType.CAUSAL_LM
|
|
278
|
-
)
|
|
279
|
-
```
|
|
280
|
-
|
|
281
|
-
## Common Issues and Solutions
|
|
282
|
-
|
|
283
|
-
### Issue: Loss Not Decreasing
|
|
284
|
-
|
|
285
|
-
```python
|
|
286
|
-
# Check 1: Verify adapter is training
|
|
287
|
-
for name, param in model.named_parameters():
|
|
288
|
-
if param.requires_grad:
|
|
289
|
-
print(f"Training: {name}")
|
|
290
|
-
|
|
291
|
-
# Check 2: Increase rank or alpha
|
|
292
|
-
config = LoraConfig(r=32, lora_alpha=64, ...)
|
|
293
|
-
|
|
294
|
-
# Check 3: Reduce learning rate
|
|
295
|
-
training_args = TrainingArguments(learning_rate=1e-4, ...)
|
|
296
|
-
```
|
|
297
|
-
|
|
298
|
-
### Issue: Out of Memory
|
|
299
|
-
|
|
300
|
-
```python
|
|
301
|
-
# Solution 1: Use QLoRA
|
|
302
|
-
bnb_config = BitsAndBytesConfig(load_in_4bit=True, ...)
|
|
303
|
-
|
|
304
|
-
# Solution 2: Enable gradient checkpointing
|
|
305
|
-
model.gradient_checkpointing_enable()
|
|
306
|
-
|
|
307
|
-
# Solution 3: Reduce batch size, increase gradient accumulation
|
|
308
|
-
training_args = TrainingArguments(
|
|
309
|
-
per_device_train_batch_size=1,
|
|
310
|
-
gradient_accumulation_steps=16
|
|
311
|
-
)
|
|
312
|
-
|
|
313
|
-
# Solution 4: Use 8-bit optimizer
|
|
314
|
-
training_args = TrainingArguments(optim="paged_adamw_8bit")
|
|
315
|
-
```
|
|
316
|
-
|
|
317
|
-
### Issue: Adapter Not Loading
|
|
318
|
-
|
|
319
|
-
```python
|
|
320
|
-
# Ensure architecture matches
|
|
321
|
-
from peft import PeftModel, PeftConfig
|
|
322
|
-
|
|
323
|
-
# Check adapter config
|
|
324
|
-
config = PeftConfig.from_pretrained("path/to/adapter")
|
|
325
|
-
print(f"Base model: {config.base_model_name_or_path}")
|
|
326
|
-
print(f"Target modules: {config.target_modules}")
|
|
327
|
-
|
|
328
|
-
# Load with correct base model
|
|
329
|
-
base_model = AutoModelForCausalLM.from_pretrained(config.base_model_name_or_path)
|
|
330
|
-
model = PeftModel.from_pretrained(base_model, "path/to/adapter")
|
|
331
|
-
```
|
|
332
|
-
|
|
333
|
-
## Quick Reference
|
|
334
|
-
|
|
335
|
-
| Parameter | Typical Range | Effect |
|
|
336
|
-
|-----------|---------------|--------|
|
|
337
|
-
| `r` (rank) | 4-64 | Adapter capacity; higher = more expressive |
|
|
338
|
-
| `lora_alpha` | r to 2*r | Scaling factor; higher = larger updates |
|
|
339
|
-
| `lora_dropout` | 0.0-0.1 | Regularization; increase for small datasets |
|
|
340
|
-
| `learning_rate` | 1e-5 to 3e-4 | LoRA tolerates higher LR than full FT |
|
|
341
|
-
| `target_modules` | attention + MLP | More modules = more capacity + memory |
|
|
342
|
-
|
|
343
|
-
## Related References
|
|
344
|
-
|
|
345
|
-
- `hyperparameter-tuning.md` - Learning rate schedules, batch sizes
|
|
346
|
-
- `deployment-optimization.md` - Adapter merging, quantization for inference
|
|
347
|
-
- `dataset-preparation.md` - Training data formatting
|
|
1
|
+
# LoRA and Parameter-Efficient Fine-Tuning
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Parameter-Efficient Fine-Tuning (PEFT) methods train only a small subset of model parameters while keeping the base model frozen. This dramatically reduces memory requirements and enables fine-tuning of large models on consumer hardware.
|
|
8
|
+
|
|
9
|
+
## When to Use PEFT vs Full Fine-Tuning
|
|
10
|
+
|
|
11
|
+
| Method | Use When | Avoid When |
|
|
12
|
+
|--------|----------|------------|
|
|
13
|
+
| **LoRA** | 7B+ models, limited VRAM, need multiple task adapters | Very small models (<1B), need maximum quality |
|
|
14
|
+
| **QLoRA** | 13B+ models, single GPU, memory-constrained | High-throughput training, inference speed critical |
|
|
15
|
+
| **Full Fine-Tuning** | Small models, abundant compute, maximum performance needed | Large models, limited resources |
|
|
16
|
+
| **Prefix Tuning** | Generation tasks, need interpretable soft prompts | Complex reasoning tasks |
|
|
17
|
+
| **IA3** | Extreme efficiency needed, inference overhead critical | Tasks needing high adapter capacity |
|
|
18
|
+
|
|
19
|
+
## LoRA Configuration
|
|
20
|
+
|
|
21
|
+
```python
|
|
22
|
+
from peft import LoraConfig, get_peft_model, TaskType
|
|
23
|
+
from transformers import AutoModelForCausalLM, AutoTokenizer
|
|
24
|
+
|
|
25
|
+
# Load base model
|
|
26
|
+
model = AutoModelForCausalLM.from_pretrained(
|
|
27
|
+
"meta-llama/Llama-3.1-8B",
|
|
28
|
+
torch_dtype=torch.bfloat16,
|
|
29
|
+
device_map="auto",
|
|
30
|
+
attn_implementation="flash_attention_2" # Use Flash Attention if available
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
# LoRA configuration for instruction tuning
|
|
34
|
+
lora_config = LoraConfig(
|
|
35
|
+
task_type=TaskType.CAUSAL_LM,
|
|
36
|
+
r=16, # Rank - start with 8-16, increase if underfitting
|
|
37
|
+
lora_alpha=32, # Alpha - typically 2x rank
|
|
38
|
+
lora_dropout=0.05, # Dropout for regularization
|
|
39
|
+
target_modules=[ # Target attention layers
|
|
40
|
+
"q_proj", "k_proj", "v_proj", "o_proj", # Attention
|
|
41
|
+
"gate_proj", "up_proj", "down_proj" # MLP (optional, increases capacity)
|
|
42
|
+
],
|
|
43
|
+
bias="none", # "none", "all", or "lora_only"
|
|
44
|
+
modules_to_save=None # Modules to train fully (e.g., embed_tokens for new tokens)
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
# Create PEFT model
|
|
48
|
+
model = get_peft_model(model, lora_config)
|
|
49
|
+
model.print_trainable_parameters()
|
|
50
|
+
# Output: trainable params: 13,631,488 || all params: 8,043,163,648 || trainable%: 0.1695
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Rank Selection Guide
|
|
54
|
+
|
|
55
|
+
```python
|
|
56
|
+
def recommend_lora_rank(task_complexity: str, dataset_size: int, model_size_b: float) -> int:
|
|
57
|
+
"""
|
|
58
|
+
Recommend LoRA rank based on task and resources.
|
|
59
|
+
|
|
60
|
+
Args:
|
|
61
|
+
task_complexity: "simple" (classification), "moderate" (QA), "complex" (creative)
|
|
62
|
+
dataset_size: Number of training examples
|
|
63
|
+
model_size_b: Model size in billions of parameters
|
|
64
|
+
"""
|
|
65
|
+
base_rank = {
|
|
66
|
+
"simple": 8,
|
|
67
|
+
"moderate": 16,
|
|
68
|
+
"complex": 32
|
|
69
|
+
}[task_complexity]
|
|
70
|
+
|
|
71
|
+
# Adjust for dataset size
|
|
72
|
+
if dataset_size < 1000:
|
|
73
|
+
rank = max(4, base_rank // 2) # Reduce rank to prevent overfitting
|
|
74
|
+
elif dataset_size > 50000:
|
|
75
|
+
rank = min(64, base_rank * 2) # Can support higher rank
|
|
76
|
+
else:
|
|
77
|
+
rank = base_rank
|
|
78
|
+
|
|
79
|
+
# Adjust for model size (larger models may need lower rank)
|
|
80
|
+
if model_size_b > 30:
|
|
81
|
+
rank = max(4, rank // 2)
|
|
82
|
+
|
|
83
|
+
return rank
|
|
84
|
+
|
|
85
|
+
# Example usage
|
|
86
|
+
rank = recommend_lora_rank("moderate", dataset_size=10000, model_size_b=8)
|
|
87
|
+
print(f"Recommended rank: {rank}") # 16
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## QLoRA Configuration
|
|
91
|
+
|
|
92
|
+
QLoRA combines 4-bit quantization with LoRA for extreme memory efficiency.
|
|
93
|
+
|
|
94
|
+
```python
|
|
95
|
+
from transformers import BitsAndBytesConfig
|
|
96
|
+
import torch
|
|
97
|
+
|
|
98
|
+
# 4-bit quantization config
|
|
99
|
+
bnb_config = BitsAndBytesConfig(
|
|
100
|
+
load_in_4bit=True,
|
|
101
|
+
bnb_4bit_quant_type="nf4", # NormalFloat4 for better quality
|
|
102
|
+
bnb_4bit_compute_dtype=torch.bfloat16,
|
|
103
|
+
bnb_4bit_use_double_quant=True # Nested quantization for more savings
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
# Load quantized model
|
|
107
|
+
model = AutoModelForCausalLM.from_pretrained(
|
|
108
|
+
"meta-llama/Llama-3.1-70B",
|
|
109
|
+
quantization_config=bnb_config,
|
|
110
|
+
device_map="auto",
|
|
111
|
+
attn_implementation="flash_attention_2"
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
# Prepare model for kbit training
|
|
115
|
+
from peft import prepare_model_for_kbit_training
|
|
116
|
+
model = prepare_model_for_kbit_training(model, use_gradient_checkpointing=True)
|
|
117
|
+
|
|
118
|
+
# Apply LoRA
|
|
119
|
+
lora_config = LoraConfig(
|
|
120
|
+
r=16,
|
|
121
|
+
lora_alpha=32,
|
|
122
|
+
target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
|
|
123
|
+
lora_dropout=0.05,
|
|
124
|
+
bias="none",
|
|
125
|
+
task_type=TaskType.CAUSAL_LM
|
|
126
|
+
)
|
|
127
|
+
model = get_peft_model(model, lora_config)
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Memory Comparison
|
|
131
|
+
|
|
132
|
+
| Model | Full FT | LoRA (r=16) | QLoRA (r=16) |
|
|
133
|
+
|-------|---------|-------------|--------------|
|
|
134
|
+
| Llama 3.1 8B | ~64 GB | ~18 GB | ~6 GB |
|
|
135
|
+
| Llama 3.1 70B | ~560 GB | ~160 GB | ~48 GB |
|
|
136
|
+
| Mistral 7B | ~56 GB | ~16 GB | ~5 GB |
|
|
137
|
+
|
|
138
|
+
## Training with PEFT
|
|
139
|
+
|
|
140
|
+
```python
|
|
141
|
+
from transformers import TrainingArguments, Trainer
|
|
142
|
+
from trl import SFTTrainer
|
|
143
|
+
|
|
144
|
+
training_args = TrainingArguments(
|
|
145
|
+
output_dir="./lora-output",
|
|
146
|
+
num_train_epochs=3,
|
|
147
|
+
per_device_train_batch_size=4,
|
|
148
|
+
gradient_accumulation_steps=4, # Effective batch size = 16
|
|
149
|
+
learning_rate=2e-4, # Higher LR for LoRA than full FT
|
|
150
|
+
lr_scheduler_type="cosine",
|
|
151
|
+
warmup_ratio=0.03,
|
|
152
|
+
logging_steps=10,
|
|
153
|
+
save_strategy="steps",
|
|
154
|
+
save_steps=100,
|
|
155
|
+
evaluation_strategy="steps",
|
|
156
|
+
eval_steps=100,
|
|
157
|
+
bf16=True,
|
|
158
|
+
gradient_checkpointing=True,
|
|
159
|
+
gradient_checkpointing_kwargs={"use_reentrant": False},
|
|
160
|
+
optim="paged_adamw_8bit", # Memory-efficient optimizer
|
|
161
|
+
max_grad_norm=0.3,
|
|
162
|
+
group_by_length=True, # Group similar length sequences
|
|
163
|
+
report_to="wandb"
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
# Using TRL's SFTTrainer for instruction tuning
|
|
167
|
+
trainer = SFTTrainer(
|
|
168
|
+
model=model,
|
|
169
|
+
args=training_args,
|
|
170
|
+
train_dataset=train_dataset,
|
|
171
|
+
eval_dataset=eval_dataset,
|
|
172
|
+
tokenizer=tokenizer,
|
|
173
|
+
max_seq_length=2048,
|
|
174
|
+
packing=True, # Pack short sequences for efficiency
|
|
175
|
+
dataset_text_field="text"
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
trainer.train()
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## Target Module Selection
|
|
182
|
+
|
|
183
|
+
Different architectures have different module names:
|
|
184
|
+
|
|
185
|
+
```python
|
|
186
|
+
# Common target modules by architecture
|
|
187
|
+
TARGET_MODULES = {
|
|
188
|
+
"llama": ["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"],
|
|
189
|
+
"mistral": ["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"],
|
|
190
|
+
"falcon": ["query_key_value", "dense", "dense_h_to_4h", "dense_4h_to_h"],
|
|
191
|
+
"gpt2": ["c_attn", "c_proj", "c_fc"],
|
|
192
|
+
"phi": ["q_proj", "k_proj", "v_proj", "dense", "fc1", "fc2"],
|
|
193
|
+
"qwen2": ["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"],
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
def get_target_modules(model_name: str, include_mlp: bool = True) -> list[str]:
|
|
197
|
+
"""Get appropriate target modules for a model architecture."""
|
|
198
|
+
name_lower = model_name.lower()
|
|
199
|
+
|
|
200
|
+
for arch, modules in TARGET_MODULES.items():
|
|
201
|
+
if arch in name_lower:
|
|
202
|
+
if include_mlp:
|
|
203
|
+
return modules
|
|
204
|
+
# Return only attention modules
|
|
205
|
+
attention_keywords = ["q_proj", "k_proj", "v_proj", "o_proj", "query", "key", "value", "attn"]
|
|
206
|
+
return [m for m in modules if any(kw in m.lower() for kw in attention_keywords)]
|
|
207
|
+
|
|
208
|
+
# Default for unknown architectures - inspect model
|
|
209
|
+
raise ValueError(f"Unknown architecture: {model_name}. Inspect model.named_modules() to find target modules.")
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## Adapter Merging Strategies
|
|
213
|
+
|
|
214
|
+
```python
|
|
215
|
+
from peft import PeftModel
|
|
216
|
+
|
|
217
|
+
# Load base model and adapter
|
|
218
|
+
base_model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.1-8B")
|
|
219
|
+
model = PeftModel.from_pretrained(base_model, "path/to/lora-adapter")
|
|
220
|
+
|
|
221
|
+
# Method 1: Merge adapter weights into base model
|
|
222
|
+
merged_model = model.merge_and_unload()
|
|
223
|
+
merged_model.save_pretrained("./merged-model")
|
|
224
|
+
|
|
225
|
+
# Method 2: Merge multiple adapters (weighted combination)
|
|
226
|
+
from peft import add_weighted_adapter
|
|
227
|
+
|
|
228
|
+
# Load multiple adapters
|
|
229
|
+
model = PeftModel.from_pretrained(base_model, "adapter1", adapter_name="adapter1")
|
|
230
|
+
model.load_adapter("adapter2", adapter_name="adapter2")
|
|
231
|
+
model.load_adapter("adapter3", adapter_name="adapter3")
|
|
232
|
+
|
|
233
|
+
# Combine with weights
|
|
234
|
+
model.add_weighted_adapter(
|
|
235
|
+
adapters=["adapter1", "adapter2", "adapter3"],
|
|
236
|
+
weights=[0.5, 0.3, 0.2],
|
|
237
|
+
adapter_name="combined",
|
|
238
|
+
combination_type="linear" # or "svd", "cat"
|
|
239
|
+
)
|
|
240
|
+
model.set_adapter("combined")
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
## DoRA (Weight-Decomposed LoRA)
|
|
244
|
+
|
|
245
|
+
DoRA improves on LoRA by decomposing weights into magnitude and direction components.
|
|
246
|
+
|
|
247
|
+
```python
|
|
248
|
+
from peft import LoraConfig
|
|
249
|
+
|
|
250
|
+
# DoRA configuration
|
|
251
|
+
dora_config = LoraConfig(
|
|
252
|
+
r=16,
|
|
253
|
+
lora_alpha=32,
|
|
254
|
+
target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
|
|
255
|
+
lora_dropout=0.05,
|
|
256
|
+
use_dora=True, # Enable DoRA
|
|
257
|
+
task_type=TaskType.CAUSAL_LM
|
|
258
|
+
)
|
|
259
|
+
|
|
260
|
+
# Training is identical to LoRA
|
|
261
|
+
model = get_peft_model(model, dora_config)
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
## rsLoRA (Rank-Stabilized LoRA)
|
|
265
|
+
|
|
266
|
+
Proper scaling for higher ranks:
|
|
267
|
+
|
|
268
|
+
```python
|
|
269
|
+
from peft import LoraConfig
|
|
270
|
+
|
|
271
|
+
# rsLoRA for high-rank training
|
|
272
|
+
rslora_config = LoraConfig(
|
|
273
|
+
r=64, # Higher rank
|
|
274
|
+
lora_alpha=64,
|
|
275
|
+
target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
|
|
276
|
+
use_rslora=True, # Rank-stabilized scaling
|
|
277
|
+
task_type=TaskType.CAUSAL_LM
|
|
278
|
+
)
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
## Common Issues and Solutions
|
|
282
|
+
|
|
283
|
+
### Issue: Loss Not Decreasing
|
|
284
|
+
|
|
285
|
+
```python
|
|
286
|
+
# Check 1: Verify adapter is training
|
|
287
|
+
for name, param in model.named_parameters():
|
|
288
|
+
if param.requires_grad:
|
|
289
|
+
print(f"Training: {name}")
|
|
290
|
+
|
|
291
|
+
# Check 2: Increase rank or alpha
|
|
292
|
+
config = LoraConfig(r=32, lora_alpha=64, ...)
|
|
293
|
+
|
|
294
|
+
# Check 3: Reduce learning rate
|
|
295
|
+
training_args = TrainingArguments(learning_rate=1e-4, ...)
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
### Issue: Out of Memory
|
|
299
|
+
|
|
300
|
+
```python
|
|
301
|
+
# Solution 1: Use QLoRA
|
|
302
|
+
bnb_config = BitsAndBytesConfig(load_in_4bit=True, ...)
|
|
303
|
+
|
|
304
|
+
# Solution 2: Enable gradient checkpointing
|
|
305
|
+
model.gradient_checkpointing_enable()
|
|
306
|
+
|
|
307
|
+
# Solution 3: Reduce batch size, increase gradient accumulation
|
|
308
|
+
training_args = TrainingArguments(
|
|
309
|
+
per_device_train_batch_size=1,
|
|
310
|
+
gradient_accumulation_steps=16
|
|
311
|
+
)
|
|
312
|
+
|
|
313
|
+
# Solution 4: Use 8-bit optimizer
|
|
314
|
+
training_args = TrainingArguments(optim="paged_adamw_8bit")
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
### Issue: Adapter Not Loading
|
|
318
|
+
|
|
319
|
+
```python
|
|
320
|
+
# Ensure architecture matches
|
|
321
|
+
from peft import PeftModel, PeftConfig
|
|
322
|
+
|
|
323
|
+
# Check adapter config
|
|
324
|
+
config = PeftConfig.from_pretrained("path/to/adapter")
|
|
325
|
+
print(f"Base model: {config.base_model_name_or_path}")
|
|
326
|
+
print(f"Target modules: {config.target_modules}")
|
|
327
|
+
|
|
328
|
+
# Load with correct base model
|
|
329
|
+
base_model = AutoModelForCausalLM.from_pretrained(config.base_model_name_or_path)
|
|
330
|
+
model = PeftModel.from_pretrained(base_model, "path/to/adapter")
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
## Quick Reference
|
|
334
|
+
|
|
335
|
+
| Parameter | Typical Range | Effect |
|
|
336
|
+
|-----------|---------------|--------|
|
|
337
|
+
| `r` (rank) | 4-64 | Adapter capacity; higher = more expressive |
|
|
338
|
+
| `lora_alpha` | r to 2*r | Scaling factor; higher = larger updates |
|
|
339
|
+
| `lora_dropout` | 0.0-0.1 | Regularization; increase for small datasets |
|
|
340
|
+
| `learning_rate` | 1e-5 to 3e-4 | LoRA tolerates higher LR than full FT |
|
|
341
|
+
| `target_modules` | attention + MLP | More modules = more capacity + memory |
|
|
342
|
+
|
|
343
|
+
## Related References
|
|
344
|
+
|
|
345
|
+
- `hyperparameter-tuning.md` - Learning rate schedules, batch sizes
|
|
346
|
+
- `deployment-optimization.md` - Adapter merging, quantization for inference
|
|
347
|
+
- `dataset-preparation.md` - Training data formatting
|