{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/plop-precise-lora-placement-for-efficient","title":"PLoP: Precise LoRA Placement for Efficient Finetuning of Large Models","arxiv_id":"2506.20629","date":"2025-06-25","proceeding":null,"authors":["Soufiane Hayou","Nikhil Ghosh","Bin Yu"],"abstract":"Low-Rank Adaptation (LoRA) is a widely used finetuning method for large models. Its small memory footprint allows practitioners to adapt large models to specific tasks at a fraction of the cost of full finetuning. Different modifications have been proposed to enhance its efficiency by, for example, setting the learning rate, the rank, and the initialization. Another improvement axis is adapter placement strategy: when using LoRA, practitioners usually pick module types to adapt with LoRA, such as Query and Key modules. Few works have studied the problem of adapter placement, with nonconclusive results: original LoRA paper suggested placing adapters in attention modules, while other works suggested placing them in the MLP modules. Through an intuitive theoretical analysis, we introduce PLoP (Precise LoRA Placement), a lightweight method that allows automatic identification of module types where LoRA adapters should be placed, given a pretrained model and a finetuning task. We demonstrate that PLoP consistently outperforms, and in the worst case competes, with commonly used placement strategies through comprehensive experiments on supervised finetuning and reinforcement learning for reasoning.","url_abs":"https://arxiv.org/abs/2506.20629v1","url_pdf":"https://arxiv.org/pdf/2506.20629v1.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"plop-precise-lora-placement-for-efficient","repo_url":"https://github.com/soufiane001/plop","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok"}}],"tasks":[],"methods":[{"method_slug":"adapter","method_name":"Adapter"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2506.20629","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2506.20629"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/soufiane001/plop","reach":{"status":"ok"}}],"summary":{"unverified":21},"by_repo_kind":{"official":{"samples":21,"ran":0,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":21,"samples":[{"code_sha256_prefix":"56f6847b5058c0bf","entry":"calculate_nfn_scores","repo":"soufiane001/plop","repo_kind":"official","path":"src/metrics.py","file_url":"https://github.com/soufiane001/plop/blob/HEAD/src/metrics.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"56f6847b5058c0bf"}},{"code_sha256_prefix":"19b7e4198c75005c","entry":"convert_alpaca_gpt4_to_messages","repo":"soufiane001/plop","repo_kind":"official","path":"sft/utils.py","file_url":"https://github.com/soufiane001/plop/blob/HEAD/sft/utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"19b7e4198c75005c"}},{"code_sha256_prefix":"26c7ec78a54319cc","entry":"convert_codefeedback_single_turn_to_messages","repo":"soufiane001/plop","repo_kind":"official","path":"sft/utils.py","file_url":"https://github.com/soufiane001/plop/blob/HEAD/sft/utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"26c7ec78a54319cc"}},{"code_sha256_prefix":"79b69244e9c2638a","entry":"custom_cached_file","repo":"soufiane001/plop","repo_kind":"official","path":"sft/dataset_transformation.py","file_url":"https://github.com/soufiane001/plop/blob/HEAD/sft/dataset_transformation.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"79b69244e9c2638a"}},{"code_sha256_prefix":"54d8e73534679cb9","entry":"extract_answer","repo":"soufiane001/plop","repo_kind":"official","path":"sft/eval_gsm8k.py","file_url":"https://github.com/soufiane001/plop/blob/HEAD/sft/eval_gsm8k.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"54d8e73534679cb9"}},{"code_sha256_prefix":"924ae8bb75628679","entry":"extract_hash_answer","repo":"soufiane001/plop","repo_kind":"official","path":"other/grpo_metamath.py","file_url":"https://github.com/soufiane001/plop/blob/HEAD/other/grpo_metamath.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"924ae8bb75628679"}},{"code_sha256_prefix":"b2c0bb9254a04a7d","entry":"first_true_indices","repo":"soufiane001/plop","repo_kind":"official","path":"sft/model_utils.py","file_url":"https://github.com/soufiane001/plop/blob/HEAD/sft/model_utils.py","link_basis":"plan_row","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"b2c0bb9254a04a7d"}},{"code_sha256_prefix":"a67d00a6a5eb9ebe","entry":"forward","repo":"soufiane001/plop","repo_kind":"official","path":"sft/model_utils.py","file_url":"https://github.com/soufiane001/plop/blob/HEAD/sft/model_utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"a67d00a6a5eb9ebe"}},{"code_sha256_prefix":"3c8e08d98dc04bfc","entry":"generate_sample","repo":"soufiane001/plop","repo_kind":"official","path":"sft/eval_gsm8k.py","file_url":"https://github.com/soufiane001/plop/blob/HEAD/sft/eval_gsm8k.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"3c8e08d98dc04bfc"}},{"code_sha256_prefix":"711f5f7e6ce5261e","entry":"get_commit_hash","repo":"soufiane001/plop","repo_kind":"official","path":"sft/dataset_transformation.py","file_url":"https://github.com/soufiane001/plop/blob/HEAD/sft/dataset_transformation.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"711f5f7e6ce5261e"}},{"code_sha256_prefix":"26e5bf7cdee2b82e","entry":"get_file_hash","repo":"soufiane001/plop","repo_kind":"official","path":"sft/dataset_transformation.py","file_url":"https://github.com/soufiane001/plop/blob/HEAD/sft/dataset_transformation.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"26e5bf7cdee2b82e"}},{"code_sha256_prefix":"8398509d77935efd","entry":"get_group_metrics","repo":"soufiane001/plop","repo_kind":"official","path":"src/metrics.py","file_url":"https://github.com/soufiane001/plop/blob/HEAD/src/metrics.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"8398509d77935efd"}},{"code_sha256_prefix":"c24b405d6da63aab","entry":"get_reward","repo":"soufiane001/plop","repo_kind":"official","path":"sft/model_utils.py","file_url":"https://github.com/soufiane001/plop/blob/HEAD/sft/model_utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"c24b405d6da63aab"}},{"code_sha256_prefix":"8bcd908ce9285bb4","entry":"get_standardized_output_dir","repo":"soufiane001/plop","repo_kind":"official","path":"sft/sft_metamath.py","file_url":"https://github.com/soufiane001/plop/blob/HEAD/sft/sft_metamath.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"8bcd908ce9285bb4"}},{"code_sha256_prefix":"e0cd2fea90cee405","entry":"is_openai_format","repo":"soufiane001/plop","repo_kind":"official","path":"sft/utils.py","file_url":"https://github.com/soufiane001/plop/blob/HEAD/sft/utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"e0cd2fea90cee405"}},{"code_sha256_prefix":"192bbe0218c3e968","entry":"load_gsm8k_problems","repo":"soufiane001/plop","repo_kind":"official","path":"src/data.py","file_url":"https://github.com/soufiane001/plop/blob/HEAD/src/data.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"192bbe0218c3e968"}},{"code_sha256_prefix":"0d52a263c153c2ec","entry":"load_humaneval_problems","repo":"soufiane001/plop","repo_kind":"official","path":"src/data.py","file_url":"https://github.com/soufiane001/plop/blob/HEAD/src/data.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"0d52a263c153c2ec"}},{"code_sha256_prefix":"f8be0aaf21f37e43","entry":"load_mmlu_problems","repo":"soufiane001/plop","repo_kind":"official","path":"src/data.py","file_url":"https://github.com/soufiane001/plop/blob/HEAD/src/data.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"f8be0aaf21f37e43"}},{"code_sha256_prefix":"df9c02c99530976c","entry":"match_format_approximately","repo":"soufiane001/plop","repo_kind":"official","path":"other/grpo_metamath.py","file_url":"https://github.com/soufiane001/plop/blob/HEAD/other/grpo_metamath.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"df9c02c99530976c"}},{"code_sha256_prefix":"b1a30b77db50ef0f","entry":"match_format_exactly","repo":"soufiane001/plop","repo_kind":"official","path":"other/grpo_metamath.py","file_url":"https://github.com/soufiane001/plop/blob/HEAD/other/grpo_metamath.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"b1a30b77db50ef0f"}},{"code_sha256_prefix":"31fb9f4f19ee9623","entry":"select_layers_by_ratio","repo":"soufiane001/plop","repo_kind":"official","path":"sft/sft_metamath.py","file_url":"https://github.com/soufiane001/plop/blob/HEAD/sft/sft_metamath.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"31fb9f4f19ee9623"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}