Lesson 29 / 33
Security: Remote Code, Pickles and Tokens
Load third-party models safely and protect tokens, licences and user data.
By Rahul Agarwal · 15 years in web development
Treat model repos like dependencies
Downloading a model means running someone else's artefacts, so apply the same caution as with any dependency. Pickle-based weight files (pytorch_model.bin, .pt, .pkl) can execute arbitrary code when loaded, because Python's pickle format can encode function calls. The safetensors format stores only tensors and metadata, so it cannot run code; prefer repos that provide .safetensors files and pass use_safetensors=True to refuse anything else. Second, trust_remote_code=True lets a repo run its own Python modelling code on your machine. Some new architectures need it, but enable it only for repos you trust and pin a revision commit hash so the code cannot change under you. Third, protect access tokens: use fine-grained or read-only tokens, keep them in environment variables or secret stores, and rotate any token that leaks. Finally, check licences and gated-model terms, and remember that a model can memorise and repeat sensitive training data, so never fine-tune on personal data you are not allowed to process.
A cautious loading pattern
Pin the exact commit, require safetensors and keep remote code off unless you have reviewed it.
import os
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(
"some-org/some-model",
revision="<commit-sha-you-reviewed>", # immutable
use_safetensors=True, # refuse pickle weights
trust_remote_code=False, # the default; keep it that way
token=os.environ.get("HF_TOKEN"), # never a literal string
)Read the code before trusting it
If a model genuinely needs trust_remote_code=True, open the repo's .py files on the Hub and read them first. A pinned commit plus a quick review is the difference between using a dependency and blindly running a stranger's script.
Quick check: Why is safetensors considered safer than pickle-based `.bin` weight files?
- It encrypts the weights
- It only stores tensors and metadata, so loading cannot execute arbitrary code
- It is always smaller on disk
- It requires a Hub token to open
Answer
It only stores tensors and metadata, so loading cannot execute arbitrary code — Pickle can encode code that runs on load. safetensors is a simple tensor format with no code execution path.