Preheat your oven to 350°F (170°C). Line a 9x5-inch loaf pan with parchment paper, making sure to leave some overhang on two opposite sides for easy removal after baking.
In a large bowl, whisk together the all-purpose flour, baking soda, ground cinnamon, ground ginger, ground nutmeg, ground cloves, ground cardamom, and salt until the mixture is well combined and evenly distributed.
In another large mixing bowl, whisk together the canola oil, granulated sugar, light brown sugar, canned pumpkin puree, eggs, and vanilla extract until the mixture is fully combined and smooth, with no visible lumps.
Add the dry ingredients from Step 2 into the bowl with the wet ingredients from Step 3. Whisk together until a smooth and velvety batter forms. Pour the pumpkin batter into the prepared loaf pan. To encourage a beautiful crack in the bread, drag the end of a butter or paring knife down the center of the batter, just along the top.
Bake the bread at 350°F (170°C) for 55-65 minutes, or until a toothpick inserted into the center comes out with a few moist crumbs. Let the bread cool in the pan for 15 minutes, then lift it out using the parchment overhang and allow it to cool completely to room temperature before frosting. I like to let it cool fully so the frosting doesn't melt.
While the bread is cooling, add the room temperature cream cheese and unsalted butter to a large mixing bowl. Beat on medium speed until fluffy and well blended. Add the vanilla extract, powdered sugar, and 1 teaspoon of milk, then continue beating until smooth and creamy. If you desire a thinner, glaze-like consistency, add more milk as needed. Personally, I like my glaze on the thick side so it sits beautifully atop the bread.
Spread or drizzle the cream cheese frosting from Step 6 over the completely cooled pumpkin bread. Slice and enjoy! For added flair, you can sprinkle a bit of cinnamon on top or add chopped nuts if you like.